c - 读取字符串不起作用

标签 c string malloc

我有这段小代码,我真的不明白为什么它总是给我 SIGSEGV。

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

int read_strs(char **a, int *len) {

  int i;
  scanf("%d", len);
  if(*len <= 0) return 1;
  a = (char **) malloc(sizeof(char*) * (*len));
  if(a == NULL) return 1;
  for( i = 0; i < *len; i++ ) 
  {
      a[i] = malloc(sizeof(char) * 1000);
      scanf("%s", a[i]);
  }

  return 0;

}


int main(void) {
  int i, n;
  char **array;

  read_strs(array, &n);
  for( i = 0; i < n; i++ ) 
    printf("%s\n", array[i]);
    return 0;
}

它似乎甚至没有分配内存。

最佳答案

问题是 char ** array; 在你的 main 函数中永远不会加载你在测试中 malloc 的 char ** 数组。您将指针的副本发送到 read_strs - 当您在此处分配给它时它不会更新:

// a is local to test_str
a = (char **) malloc(sizeof(char*) * (*len));

如果您希望它在您当前的方案中工作,您需要传递一个指向您的 char ** array 变量的指针。您也可以简单地从 read_strs 返回 a

编辑:请注意,如果您将指针传递给 char ** array,您还必须做一些工作来使 read_strs 对指向 char **,而现在它在一个简单的 char ** 上运行。

关于c - 读取字符串不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334531/

相关文章:

c - 我需要一个图书馆名称

string - 选择性编辑距离

c++ - 更改 Makefile 标志时如何强制重新编译?

用 C 调用 Lua 字符串

java - 字符串的链接列表

c - free() 后打印数组时应用程序崩溃

c - 二维数组分配函数中的 Malloc 调用有时会崩溃

c++ - 使用 malloc、char 数组和指针

c - -I 目录与 -isystem 目录

c - perf_event_open 的权限被拒绝,除了使用 sudo 或更改 perf_event_paranoid 文件之外,还有其他方法吗?