[英]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.