我是从一本书中自学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));
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想用"Z"替换"hola"的'o',但它不起作用.如果我删除: ((str + 0)+ 1)='Z'; 我在输出中得到'o'但是如何替换字符串的字符?
当您尝试修改String Literal时,您的程序具有未定义的行为:
str[0] = "hola";
str[1] = "mundo";
*(*(str + 0) + 1) = 'Z'; // This is UB
Run Code Online (Sandbox Code Playgroud)
来自C标准#6.4.5p7 [String Literals]
如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的.如果程序试图修改此类数组,则行为未定义.
正如Stargateur所建议的那样,你可以这样使用strdup():
str[0] = strdup("hola");
str[1] = strdup("mundo");
Run Code Online (Sandbox Code Playgroud)
strdup()复制给定的字符串.它用于malloc获取新字符串的内存.一旦完成它,请务必释放它,如下所示:
free (str[0]);
free (str[1]);
Run Code Online (Sandbox Code Playgroud)
此外,使用void返回类型的main功能不符合标准.main函数的返回类型应该是int.
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |