【发布时间】:2018-10-23 01:27:39
【问题描述】:
我对 C 语言比较陌生,我正在尝试使用此代码反转一个字符串,并且它一直有效,直到输入一个包含 8 个或更多字母的单词,我不太明白为什么。
int main()
{
char string[50], newString[50];
int end, x;
printf("Enter a string: \n");
scanf("%50s", string);
end = strlen(string);
printf("%d\n", end);
for(x=0; x < end; x++){
newString[(end - 1) - x] = string[x];
}
printf("%s", newString);
}
这个问题的措辞有点奇怪,但它不会让我问这个问题,因为“我的标题与提出的其他问题太相似了”,即使我已经看过并且没有找到我想知道的内容。
【问题讨论】:
-
你好,你想改变你的语句 newString[(end-1)-x] = string[x];到 newString[x] = string[end-1-x] 。其次,正如我所见,除了50之外应该没有长度限制,你确定不是因为你使用的是带空格的字符串吗?
-
试过了,这并没有什么不同,我的代码仍然不适用于大于 7 个字母的单词。是的,我的输入词是“abigword”,没有空格。
-
您是否尝试过将
newString初始化为所有 NULL 或以其他方式将 NULL 附加到newString的末尾? -
这是否可行?我会尝试,但如果代码适用于 4 个字母的单词,例如“test”,为什么对于大于 7 个字母的单词需要进行此更改。编辑:好的,刚刚测试了这个,它现在可以工作了,虽然还不清楚为什么,但无论如何谢谢。
-
scanf("%50s", string);为大于或等于50字符的字符串在字符串数组的末尾写入一个。scanf需要'n-1'作为"%s"转换说明符的 field-width 修饰符。 (在遇到第一个空格时停止阅读)。使用fgets()而不是scanf...(并且至少检查返回以了解您使用的任何功能)