c - 简单字符串反转算法的意外结果

标签 c string algorithm reverse

我是 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/

相关文章:

c - 打印错误信息

c - 从 STDIN 读取,鸡计划

algorithm - 如何找到算法的时间复杂度?

c - 某些单词/C 的加密错误

c - 在 C 中打乱泛型数组

json - 如何读取折叠的 UTF-8 字符串

C++ 转义字符串中出现的\

c - strtoull 和 long long 算术

algorithm - 寻找最长路径网格

algorithm - 一个时期内属于另一个时期的天数