阅读字符串不起作用

时间:2015-03-29 20:35:22

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:1)

你需要一些修复,但基本上Walter是对的

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

然后

char **a;
a = *ax = (char**) malloc(sizeof(char*) * (*len));

然后在通话中,传递array的位置,以便它可以被函数填充:

read_strs(&array, &n);