gpt4 book ai didi

c - Strncpy(字符串C编程)第二次表现不佳

转载 作者:行者123 更新时间:2023-11-30 15:04:36 25 4
gpt4 key购买 nike

为什么第二个 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 足够了”之类的内容时,我只得到输出“足够”,因为'\0'。

如何正确输入存储有空格的整个句子?读取字符?

现在我使用:fgets(aString, 100, stdin);(Reading string from input with space character?)

最佳答案

为了使用 %s 正确打印字符序列,它需要以 null 终止。此外,终止符号应紧接在要打印的最后一个符号之后。但是,代码中的此部分: part2[sizeof(part2)-1] = '\0'; 始终将 part2 的第 39 个单元格设置为 0 字符。请注意,sizeof(part2) 将始终返回为 part2 分配的内存大小,在本例中为 40。此函数的值不依赖于 part2 的内容。

您应该做的是将 part2 中的 (index2-index1) 字符设置为 0。您知道您已将那么多字符复制到part2,因此您知道结果字符串的预期长度是多少。

关于c - Strncpy(字符串C编程)第二次表现不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40238465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com