C语言 替换指针数组中的特定字符



我正在从一本书中自学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));
}

在这里,我想将"hola"的"o"替换为"Z",但它不起作用。 如果我删除: ((str + 0( + 1( = 'Z'; 我在输出中得到"o",但如何替换字符串的字符?

当您尝试修改字符串文本时,您的程序具有未定义的行为:

str[0] = "hola";
str[1] = "mundo";
*(*(str + 0) + 1) = 'Z';   // This is UB

来自 C 标准#6.4.5p7 [字符串文字]

如果这些数组

的元素具有适当的值,则无法指定这些数组是否不同。如果程序尝试修改此类数组,则行为未定义。

正如Stargateur所建议的那样,您可以使用这样的strdup()

str[0] = strdup("hola");
str[1] = strdup("mundo");

strdup()复制给定的字符串。它使用malloc获取新字符串的内存。确保在完成后释放它,如下所示:

free (str[0]);
free (str[1]);

此外,使用void作为main函数的返回类型不符合标准。main函数的返回类型应int

最新更新