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

时间:2018-06-25 11:25:15

标签: 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));
}

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

1 个答案:

答案 0 :(得分:5)

您尝试修改undefined behavior时,您的程序有String Literal

    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