代码无法初始化字符串数组

标签 c arrays string pointers

我正在尝试做一些非常简单的事情:建立 10 个八字符字符串的集合,并为每个字符串分配一个简单的默认值。我的代码分配第一个字符串值,但随后出现段错误。代码如下。谁能看出我做错了什么吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main() {

   char *(names)[8];
   int i;
   char defstr[] = "none";

   *names = malloc(sizeof(char)*8*10);

   printf("%s\n",defstr);

   printf("defining\n");

   for (i=0; i<10; i++) {
      strcpy(names[i], defstr);
      printf("done with %d, string is %s\n", i, names[i]);
   }

   printf("now printing\n");

   for (i=0; i<10; i++) {
      printf("%s\n", names[i]);
   }
}

输出为

$> ./a.out
none
defining
Segmentation fault: 11

最佳答案

char *(names)[8];

声明一个8个指针的数组,与

相同
char* names[8];

然后

*names = malloc(sizeof(char)*8*10);

将第一个指针设置为指向 80 个字符的数组。其他 7 个指针仍未初始化。

您似乎想要一个指向数组的指针,这将是

char (*names)[8];

names = malloc(10*sizeof(*names));

关于代码无法初始化字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38877542/

相关文章:

c - 努力让 Makefile 使用单独的头文件和源文件目录运行

检查 C 值中的元素

c - 将 Doxygen 链接类型用于 C 文件

ruby - 使用数组中的键访问散列

swift - 如何删除 Double 中小数点前的所有零

c - (第一个 C 程序/Hello World)不断出现语法错误

c++ - c++中的这个反向数组代码有什么问题?

arrays - 使用 Swift 的 for-in 循环中的一组字符串填充数组

c - 如何检查字符串是否以 C 中的 ".csv"结尾

php - 在 php 数组中搜索部分字符串匹配