gpt4 book ai didi

c - 修改char* str的内容

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:44 24 4
gpt4 key购买 nike

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

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

有没有办法反转str

  1. 不将其更改为 char str[] = "Hello"
  2. 不改变main()函数中的代码
  3. 保持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("%s\n", str);
return 0;
}

最佳答案

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

像这样尝试:

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

上面,str 不再是字符串文字,它是一个初始化为 {'H', 'e', 'l', 'l', 'o', '\0'},因此您可以根据需要修改它的内容。

或者你可以使用malloc()

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

当定义字符串文字时,使用 const 来保护它不被修改,至少不被意外修改。

没有办法满足这些要求

  1. Without changing it to char str[] = "Hello"

    Because you cannot modify string literals

  2. Without changing the code in main() function

    Because that would require the program to modify a string literal and YOU CAN'T

第三个要求,一点问题都没有。

关于c - 修改char* str的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32752112/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com