簡體   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