在C中反转字符串

Num*_*tor 3 c string

以下代码有什么问题?

#define N 30
int main() {
    char str[N], new_str[N];
    int i,len;
    printf("Please enter 20 letters. \n");
    scanf("%s", str);
    len = strlen(str);
    printf("The length of str is  %d ", len);
    for (i=0; i< len; i++)
        new_str[i]=str[len-1-i];
    printf("The result is: %s\n", new_str);
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我检查了16个字符以下的每个字符串程序是否正常,上面它返回结尾的未定义字符:

  Please enter 20 letters.
  1234567891111111

  The result is: 1111111987654321q=V?.
Run Code Online (Sandbox Code Playgroud)

但是,如果我str, new_str用"" 初始化,问题就解决了.我仍然想知道导致问题的原因.

MBy*_*ByD 10

您需要添加空终止符:

new_str[len] = '\0';
Run Code Online (Sandbox Code Playgroud)

否则,在最后一个字符后面有垃圾,所以字符串没有结束

  • 注意,`\ 0`也被许多字符串函数添加; `strcpy`,`strcat`等等.并且使用常量赋值,例如`const char*s ="string";`但不能手动操作字符串中的各个字符! (2认同)

dda*_*dda 9

您需要在new_str中添加一个空终止符,否则printf不知道何时停止.或者你可以像原来那样在原位反转弦.

char s[] = "StackOverflow";
size_t l = strlen(s);
int i, j, k;
k = l/2;
// Work with half the length
for (i=0; i<k; i++) {
  // swap the two bytes
  j=s[i];
  s[i]=s[l-1-i];
  s[l-1-i]=j;
}
Run Code Online (Sandbox Code Playgroud)