实现“split”功能时c代码输出不一致

问题描述 投票:0回答:1

我正在尝试用 C 语言实现 python 的“split()”函数,并使用以下代码:

#include <stdio.h>
#include <string.h>

int strsplit(char *, unsigned long *);
void strprint(char *);
void empty_arr(char *);

int main()
{

  char str1[] = "help me out"; // changeable line ~~~~~~~~~~~~~~
  unsigned long str2[strlen(str1)];

  int k = strsplit(&str1, &str2);
  unsigned long *p;
  p = &str2;

  for (int i = 0; i < k; i++)
  {
    printf("%u\n", str2[i]);
  }

  return 0;
}

void strprint(char *s)
{
  while (*s != '\0')
  {
    printf("%c\n", *s);
    s++;
  }
}

void empty_arr(char *a)
{
  while (*a != '\0')
  {
    *a = '\0';
    a++;
  }
}

int strsplit(char *s, unsigned long *n)
{

  int i = 0;
  char temp[50];
  char *t = temp;

  while (1 == 1)
  {
    // printf("*s = %c\n", *s);
    // printf("Length: %u\n\n", strlen(temp));

    if (*s == ' ' || *s == '\0')
    {
      // printf("Entering!\n");
      *n = strlen(temp);
      n++;
      i++;
      empty_arr(temp);
      t = &temp;
      if (*s == '\0')
        break;
    }
    else
    {
      *t = *s;
      t++;
    }

    s++;
  }
  return i;
}

输出为: 4 2 3 3

但是,当我将 str1 (用“可更改行”注释)更改为“帮帮我” 那么我收到的输出是这样的: 6 2 3 3

对于第一个输入,函数 strsplit 正确地将单词“help”的长度确定为 4,但对于第二个输入,它确定其长度为 6。

我用过高级语言编程,但从未使用过 C 等低级语言。 任何帮助将不胜感激。

c pointers
1个回答
0
投票

注意到一些问题:

  • int k = strsplit(&str1, &str2);
    应该是
    int k = strsplit(str1, str2);
  • t = &temp;
    应该是
    t = temp;
  • p = &str2;
    应该是
    p = str2;
    - 但
    p
    未使用,所以只需将其删除即可。
  • 打印
    unsigned long
    不应使用
    %u
    ,而应使用
    %lu

进行这些更改后,您的程序将打印:

4
2
3
3
© www.soinside.com 2019 - 2024. All rights reserved.