[英]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数组。
您最好将字符串复制到其他临时字符串。
char*
复制原始字符串。 分配足够的内存。 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.