相关疑难解决方法(0)

在C中反转字符串

以下代码有什么问题?

#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用"" 初始化,问题就解决了.我仍然想知道导致问题的原因.

c string

3
推荐指数
2
解决办法
1091
查看次数

C 中的就地字符串反转

我正在尝试学习 C 的基础知识,但我无法弄清楚为什么这段代码不起作用。reverse() 中的 while 循环导致总线错误。我在编程面试书中发现几乎相同的代码作为有效的解决方案,但是我在这里看到的这个或其他类似的方法都对我有用,没有总线错误。

#include <stdio.h>

void reverse(char* str) {
 char* end = str;
 char tmp = 0;
 if(str) {
  while(*end) {
   end++;
  }
  --end;
  while(end>str) {
   tmp = *end;
   *end-- = *str;
   *str++ = tmp;
  }
 }
}

int main() {
 char* a = "12";
 puts(a);
 reverse(a);
 puts(a);

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string reverse in-place

0
推荐指数
1
解决办法
3495
查看次数

标签 统计

c ×2

string ×2

in-place ×1

reverse ×1