C 替换指针数组中的特定字符
我正在从一本书中自学C语言,目前正在学习指针和数组C 替换指针数组中的特定字符,c,arrays,pointers,C,Arrays,Pointers,我正在从一本书中自学C语言,目前正在学习指针和数组 #include <stdio.h> #include <string.h> #define LINES 5 void main() { char* str[LINES]; str[0] = "hola"; str[1] = "mundo"; *(*(str + 0) + 1) = 'Z'; printf("%c", *(*(str + 0) + 1)); } #包括 #包括 #
#include <stdio.h>
#include <string.h>
#define LINES 5
void main()
{
char* str[LINES];
str[0] = "hola";
str[1] = "mundo";
*(*(str + 0) + 1) = 'Z';
printf("%c", *(*(str + 0) + 1));
}
#包括
#包括
#定义第5行
void main()
{
字符*str[行];
str[0]=“hola”;
str[1]=“mundo”;
*(*(str+0)+1)='Z';
printf(“%c”,*(*(str+0)+1));
}
在这里,我想用“Z”替换“hola”的“o”,但它不起作用。
如果我删除:
((str+0)+1)='Z';
我在输出中得到“o”,但如何替换字符串的字符?当您试图修改一个:
来自C标准#6.4.5p7[字符串文字]
如果这些数组的元素具有适当的值,则未指定这些数组是否不同。如果程序试图修改这样的数组,则行为是未定义的
正如Stargateur所建议的,您可以像这样使用strdup()
:
str[0] = strdup("hola");
str[1] = strdup("mundo");
free (str[0]);
free (str[1]);
strdup()
复制给定字符串。它使用malloc
为新字符串获取内存。完成后,请确保将其释放,如下所示:
str[0] = strdup("hola");
str[1] = strdup("mundo");
free (str[0]);
free (str[1]);
此外,使用void
作为main
函数的返回类型也不符合标准。main
函数的返回类型应为int
当您试图修改以下函数时,您的程序所具有的返回类型:
来自C标准#6.4.5p7[字符串文字]
如果这些数组的元素具有适当的值,则未指定这些数组是否不同。如果程序试图修改这样的数组,则行为是未定义的
正如Stargateur所建议的,您可以像这样使用strdup()
:
str[0] = strdup("hola");
str[1] = strdup("mundo");
free (str[0]);
free (str[1]);
strdup()
复制给定字符串。它使用malloc
为新字符串获取内存。完成后,请确保将其释放,如下所示:
str[0] = strdup("hola");
str[1] = strdup("mundo");
free (str[0]);
free (str[1]);
此外,使用
void
作为main
函数的返回类型也不符合标准。main
函数的返回类型应该是int
注意,修改字符串文字是实现的行为,很多实现都将其定义为未定义的行为。如果你想玩字符串,你需要先学会创建它们,如果可用,请使用strdup()
“strdup()”复制一个字符串并返回指向该字符串的指针,但在我的代码中,我只想替换一个字符。“strdup()”会有什么帮助?这有助于你避免segfault。C对此有一些语法上的甜点:与其使用*(*(str+0)+1)='Z'
,不如使用:str[0][1]='Z'
对于main()
只有两个有效的签名,它们的返回类型都是int
,notvoid
请注意,修改字符串文字是实现的行为,许多实现将其定义为未定义的行为。如果你想玩字符串,你需要先学会创建它们,如果可用,请使用strdup()
“strdup()”复制一个字符串并返回指向该字符串的指针,但在我的代码中,我只想替换一个字符。“strdup()”会有什么帮助呢?它能帮助你不犯错误。C对此有一些语法上的甜点:与其使用*(*(str+0)+1)='Z'
,不如使用:str[0][1]='Z'
对于main()
只有两个有效的签名,它们的返回类型都是int
,而不是void
谢谢!成功了!但是请注意,strdup不是标准的C。谢谢!成功了!但是请注意,strdup不是标准的C。