修改char * str的内容

我尝试通过void函数来反转字符串,但是对于“str”它存储的只读内存(正如我在搜索论坛中的现有线程中所知的)发生分段错误。

我试图在“反向”函数中使用strcpy(copy,str),但它只是反转新创建的char数组“copy”,它不能返回到main函数。 我不想在反向函数中使用printf(“%s”,copy)来打印反转的字符串。

无论如何反向str

  • 不改变它为char str[] = "Hello"
  • 不改变main()函数中的代码
  • reverse()的函数类型保留为void
  • void reverse(char* str)
    {
      int l = strlen(str);
      char temp;
      int j = length - 1;
    
      for (int i = 0; i < j; ++i)
      {
         temp = str[i];
         str[i] = str[j];
         str[j] = temp;
         --j;
      }
    }
    
    int main(int argc, char* argv[])
    {
       char* str = "Hello";
       reverse(str);
       printf("%sn", str);
       return 0;
    }
    

    问题是你不能修改字符串文字。

    像这样尝试:

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

    在上面, str不再是一个字符串,它是一个初始化为{'H', 'e', 'l', 'l', 'o', ''}的数组,所以你可以修改它的内容想。

    或者你可以使用malloc()

    char *str = malloc(6);
    if (str != NULL)
     {
        strcpy(str, "Hello");
        reverse(str);
        fprintf(stdout, "%sn", str);
        /* And never forget to `free' */ 
        free(str);
     }
    

    当定义字符串文字时,使用const来防止它被修改,至少不会意外地这样做。

    没有办法来满足这些要求

  • 不改变它为char str[] = "Hello"

    因为你不能修改字符串文字

  • 不改变main()函数中的代码

    因为那需要程序修改一个字符串文字而你不能

  • 第三项要求并没有带来任何问题。


    每次你使用一个指针,你必须在C中使用malloc()或者在C ++中使用new() ,这可能是问题所在。 但是你总是可以把任何东西的地址解除回到像我下面这样的指针

    演示:http://ideone.com/LnOtDL

    #include <string.h>
    
    void reverse(char* str)
    {
      int length = strlen(str);
      char temp;
      int j = length - 1;
    
      for (int i = 0; i < j; ++i)
      {
         temp = str[i];
         str[i] = str[j];
         str[j] = temp;
         --j;
      }
    }
    
    int main(int argc, char* argv[])
    {
       char str[] = "Hello";
       reverse(&str[0]);
       printf("%sn", str);
       return 0;
    }
    
    链接地址: http://www.djcxy.com/p/72151.html

    上一篇: Modify the content of char* str

    下一篇: C Text Processing: Output Wrong Size