【发布时间】:2017-03-07 09:56:19
【问题描述】:
为什么第二个 strncpy 在打印时会给出不正确的奇怪符号? 我需要类似 fflush(stdin) 的东西吗?
请注意,我使用 scanf("%s",aString); 来读取整个字符串,输入的输入首先以空格开头,以便正常工作。
void stringMagic(char str[], int index1, int index2)
{
char part1[40],part2[40];
strncpy(part1,&str[0],index1);
part1[sizeof(part1)-1] = '\0';//strncpy doesn't always put '\0' where it should
printf("\n%s\n",part1);
strncpy(part2,&str[index1+1],(index2-index1));
part2[sizeof(part2)-1] = '\0';
printf("\n%s\n",part2);
}
编辑 问题似乎出在
scanf("%s",aString);
因为当我使用 printf("\n%s",aString); 并且我输入了类似“Hello world”之类的内容时,我只能得到输出“Enough”,因为'\0'。
如何正确输入包含空格的整个句子?读字符?
现在我使用: fgets (aString, 100, stdin); (Reading string from input with space character?)
【问题讨论】:
-
检查限制 (index1 + 1) 和 (index2 - index1) 实际上是否在 char 数组 part2 的大小范围内。这可能是造成它的原因。然后,检查 str 是否真的格式正确。
-
fflush(stdin) 是未定义的行为,所以你不应该在任何程序中这样做。
-
但到目前为止,这在我的程序中运行良好。如果你知道另一种选择,我会很高兴听到它(因为有时在第一次 scanf 之后另一个 scanf 会失败)