读取字符串不起作用
Reading strings doesn't work
我有这段小代码,我真的不明白为什么它总是给我 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;
永远不会加载您在测试中 malloc 的 char ** 数组。您将指针的副本发送到 read_strs - 当您在此处分配给它时它不会更新:
// a is local to test_str
a = (char **) malloc(sizeof(char*) * (*len));
如果您希望它在您当前的方案中工作,您需要传递一个指向您的 char ** array
变量的指针。您也可以简单地从 read_strs
.
return a
edit:请注意,如果您将指针传递给 char ** array
,您还必须做一些工作才能使 read_strs 对指针进行操作到 char **
,而现在它在简单的 char **
.
上运行
您需要一些修复,但基本上 Walter 是对的
int read_strs(char***ax, *len){
然后
char **a;
a = *ax = (char**) malloc(sizeof(char*) * (*len));
然后在调用中,传递array
的位置,这样就可以被函数填充:
read_strs(&array, &n);
我有这段小代码,我真的不明白为什么它总是给我 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;
永远不会加载您在测试中 malloc 的 char ** 数组。您将指针的副本发送到 read_strs - 当您在此处分配给它时它不会更新:
// a is local to test_str
a = (char **) malloc(sizeof(char*) * (*len));
如果您希望它在您当前的方案中工作,您需要传递一个指向您的 char ** array
变量的指针。您也可以简单地从 read_strs
.
a
edit:请注意,如果您将指针传递给 char ** array
,您还必须做一些工作才能使 read_strs 对指针进行操作到 char **
,而现在它在简单的 char **
.
您需要一些修复,但基本上 Walter 是对的
int read_strs(char***ax, *len){
然后
char **a;
a = *ax = (char**) malloc(sizeof(char*) * (*len));
然后在调用中,传递array
的位置,这样就可以被函数填充:
read_strs(&array, &n);