Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 替换指针数组中的特定字符_C_Arrays_Pointers - Fatal编程技术网

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)); } #包括 #包括 #

我正在从一本书中自学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));
}
#包括
#包括
#定义第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
,not
void
请注意,修改字符串文字是实现的行为,许多实现将其定义为未定义的行为。如果你想玩字符串,你需要先学会创建它们,如果可用,请使用
strdup()
“strdup()”复制一个字符串并返回指向该字符串的指针,但在我的代码中,我只想替换一个字符。“strdup()”会有什么帮助呢?它能帮助你不犯错误。C对此有一些语法上的甜点:与其使用
*(*(str+0)+1)='Z'
,不如使用:
str[0][1]='Z'
对于
main()
只有两个有效的签名,它们的返回类型都是
int
,而不是
void
谢谢!成功了!但是请注意,strdup不是标准的C。谢谢!成功了!但是请注意,strdup不是标准的C。