我正在使用一小段代码来测试较大(入门)程序的功能,但我不理解两个字符串之间的区别。
我发现并使用了:
#include <stdio.h>
#include <string.h>
int main()
{
char *string, *found;
string = strdup ("1/2/3");
printf("Orig: '%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("%s\n",found);
return(0);
}
我遇到段错误。我了解指针,数组和字符串的基础知识,但是很明显我缺少了一些东西,很希望有人告诉我它是什么!
另外-如果更改printf("%s\n",found);
为,printf("%i\n",found);
我会返回一些垃圾整数,但始终是正确的数量,例如,如果输入,1/2/3
我会得到三行整数,1111/2222
我会得到两行。
谢谢!
-编辑-有一个附加问题strsep
,在此处详细说明。谢谢大家
在第一段代码中,string
分配了返回值strdup
,该返回值分配了用于复制字符串的空间,并返回了指向该分配空间的指针。
在第二段代码中,将string
其传递给时未初始化scanf
,因此scanf
正在读取该指针中的无效值并尝试取消引用。这会调用未定义的行为,在这种情况下将表现为崩溃。
您需要为用户的字符串留出空间。一种简单的方法是创建给定大小的数组:
char string[80];
然后说出scanf
它可以读多少个字符:
scanf("%79s",string);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句