繁体   English   中英

在C中反转字符串的函数-如果字符串文字是什么?

[英]Function to reverse a string in C - What if is a string literal?

我编写了以下函数,它将在C中反转一个String:

void reverse(char *str) {
        int length = strlen(str) - 1;
        for (int i=0; i < length/2; i++) {
                char tmp = str[i];
                str[i] = str[length - i];
                str[length - i] = tmp;
        } 
}

如果我这样做,这行得通:

char a[]="Hello";
reverse(a);

但是,如果我调用它传递字符串文字,例如:

char *a = "Hello";

它不会工作。

那么,我将如何修改我的函数,使其可以接受字符串文字并反转它们呢?

您不能这样做,字符串文字是C中的常量

也许,您需要复制字符串,就像您在第一个示例中所做的一样,在第一个示例中,您使用字符串文字初始化了char数组。

您最好将字符串复制到其他临时字符串。

  1. 使用另一个char*复制原始字符串。 分配足够的内存。
  2. 将源字符串复制到此字符串。 不要忘记将其终止。
  3. 相反..
  4. 使用后不要忘记释放此内存。
 char *a1 = "Hello"; char* copy_a1 = malloc(sizeof(char)*(strlen(a1)+1)); strncpy(copy_a1, a1, strlen(a1)); copy_a1[strlen(a1)] = '\\0'; reverse(copy_a1); //free memory used. 

问题是C历史。

char *a = "Hello"; 应该是const char *a = "Hello"; 但是const在C成功之后才出现,所以char *a = "Hello"; 被允许保留OK语法。

代码是否为const char *a = "Hello"; reverse(a); 会产生警告(或错误)。

修改创建类似:

char *reverse(char *dest, const char *src);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM