我正在使用一小段代码来测试更大(初学者)程序的功能,但是在显示我从字符串中提取的令牌时遇到问题。
我发现并使用了:
#include <stdio.h>
#include <string.h>
int main()
{
char *string, *found;
string = strdup ("1/2/3");
printf("Original string: '%s'\n",string);
while ((found = strsep(&string,"/")) != NULL )
printf ("%s\n",found);
return (0);
}
这很好用,一次将令牌打印为字符串。
然后,当我尝试移动到用户输入的字符串时:
#include <stdio.h>
#include <string.h>
int main()
{
char string[13];
char *found, *cp = string;
fprintf(stderr, "\nEnter string: ");
scanf("%12s",string);
printf("Original string: '%s'\n",string);
while((found = strsep(&cp,"/,-")) != NULL )
printf("Test 1"); /*To pinpoint where the seg fault arises*/
printf("%s\n",found);
return(0);
}
我在线路上遇到了段错误printf("%s\n",found);
。我掌握了指针、数组和字符串的基础知识,但显然我遗漏了一些东西,希望有人能告诉我它是什么!
另外 - 如果我将printf("%s\n",found);
eg 的参数更改为printf("%i\n",found);
我会返回一些随机性,但总是正确的数量,例如如果我输入1/2/3
我会得到三行垃圾,输入1111/2222
会给出两行。我尝试了 %c, %i, %d, %p 并且他们都做同样的事情,但是 %s 段错误。
我完全被难住了。