【发布时间】:2021-11-11 12:52:02
【问题描述】:
我一直在尝试尽可能简单地反转字符串,试图向自己证明一点,但由于某种原因,代码无法正常工作。我知道我可以很容易地在网上找到一种不同的方法,但是我什么也学不到。那么有人能解释一下吗?
#include <stdio.h>
#include <stdlib.h>
int main()
{ int i,n,c=0;
char s[50];
char a[50];
for(i = 0; i < 50;i++)
scanf("%[^\n]c",&s[i]);
for(n = strlen(s), i = 0; n > i; n--,c++)
s[c] = s[n-1];
printf("%s", s);
return 0;
}
【问题讨论】:
-
请edit 并定义“不工作”。阅读:How to Ask
-
为什么要逐个字符地扫描输入? AFAICT 当您这样做时,您的
s缓冲区不是 NUL 终止的,这将导致strlen()表现出未定义的行为。 -
提示:拿一张纸,剪成4段,在4张纸上分别写上字母A到D。把它们放在一张桌子上,这样它们就形成了“ABCD”这个词。现在应用您的算法,您会发现问题所在。
-
它反转到一半,然后打印出常规文本......我试图理解它为什么这样做?
-
好吧,我明白了......但是该死的,这真的很混乱
标签: c loops for-loop reverse c-strings