c - 为什么 C 的 strcpy 对于双索引数组会失败?

标签 c arrays pointers cstring strcpy

下面的代码似乎有段错误,我不明白为什么。

#include <string.h>

static char src[] = "aaa";

int main()
{
   char* target[2] = {"cccc","bbbbbbbbbb"};
   strcpy(target[1],src);
   return 0;
}

最佳答案

因为 target[1] 是指向 "bbbbbbbbbb" 的指针,并且不允许修改字符串常量。这是未定义的行为。

这与以下没有什么不同:

char *x = "bbb";
x[0] = 'a';

我认为您可能将它与以下内容混淆了:

char x[] = "bbb";
x[0] = 'a';

哪个有效的,因为它创建了一个您可以修改的数组。但是你的给你的是:

char* target[2] = {"cccc","bbbbbbbbbb"};

是一个指针数组,所有指针都指向不可修改的内存。

如果你要尝试:

char t0[] = "cccc";
char t1[] = "bbbbbbbbbb";
char* target[2] = {t0, t1};
strcpy(target[1],src);

您会发现它可以工作,因为 target[1] 现在指向 t1,它是可修改的。

关于c - 为什么 C 的 strcpy 对于双索引数组会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5073521/

相关文章:

c++ - Flood_router6.c中的一些函数(BackTrack中的DoS程序)

c - 从多个 sockaddr_storage 中提取 IP 和端口到 char* 中

Javascript/React - 获取数组中匹配特定条件的第一项

php - 在插入数据库之前在数组上添加附加值

c++ - 创建指向结构的指针数组 - C++

c - 尝试用 C 创建基本的二叉搜索树,但对 'unused variable' 感到困惑?

c - 从指针数组中删除指针

javascript - 找到最相似的数字数组

c++ - 通过指针恢复对数组的引用。 UB 与否?

将 int 转换为 void*