我是 C 语言的新手。我想通过解决 coderbyte challenges 来学习这门语言。
但我一开始就卡住了。它应该是一个简单的字符串反转算法。
当我输入诸如“asdf”或“1234567”之类的内容时,输出是正确的(“fdsa”、“7654321”)。但是,当我输入“12345678”或“thisiscool”时,结果是“87654321▒@”/“loocsisiht@”。我不知道 @ 从哪里来。
这是我的代码:
#include <stdio.h>
#include <string.h>
void FirstReverse(char str[]) {
int len = strlen(str);
char nstr[len];
int i;
for(i = 0; i < len; i++) {
nstr[i] = *(str+len-1-i);
}
printf("%s\n", nstr);
}
int main(void) {
char str[100];
FirstReverse(gets(str));
return 0;
}
有人可以告诉我在哪里可以找到错误吗? 提前致谢:)
最佳答案
在 C 中,字符串以零结尾。例如,字符串“cat”有 4 个字符,表示为 ('c','a','t',(char)0)。你忘记了最后的 0。
请注意,strlen
返回的字符串长度没有最后的 0
,因此字符串 foo
包含 strlen(foo)+1
个字符。分配字符串时请记住这一点。
关于c - 简单字符串反转算法的意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38073950/