Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将行读取到字符串数组_C_File_Pointers_Segmentation Fault - Fatal编程技术网

C 将行读取到字符串数组

C 将行读取到字符串数组,c,file,pointers,segmentation-fault,C,File,Pointers,Segmentation Fault,我试图使函数用文件中的行填充字符串数组,但编译器(GCC)仍然给我一个警告。如果我尝试运行已编译的应用程序,则会出现“分段错误”错误 源代码: 主要的 将地址[1024][128]传递给函数时,编译器只执行一步衰减,参数类型应为char(*)[128],而不是char** 您还需要将其第一个维度传递给函数,这意味着 int getAddresses(字符(int(*arr)[128],int x) 首先,你犯了一个典型的错误:char**与char(*)[128]不同,后者是地址的类型 当您试图

我试图使函数用文件中的行填充字符串数组,但编译器(GCC)仍然给我一个警告。如果我尝试运行已编译的应用程序,则会出现“分段错误”错误
源代码:

主要的
地址[1024][128]
传递给函数时,编译器只执行一步衰减,参数类型应为
char(*)[128]
,而不是
char**

您还需要将其第一个维度传递给函数,这意味着

int getAddresses(字符(int(*arr)[128],int x)


首先,你犯了一个典型的错误:
char**
char(*)[128]
不同,后者是
地址的类型

当您试图在一行中取消对它的引用时,就会出现分段错误

while(adresses[i-1][0] != EOF)
除了为
i=0
寻址
[i-1]
会给您带来糟糕的结果之外,您应该将函数定义为

int getAdresses(char (*adresses)[128])
为了能够正确传递二维数组和
fscanf
应该扫描到实际的行缓冲区,如果您正在逐行读取,请使用
fgets

while(fgets(adresses[i], 128, fr)) i++;

您分配的数组

char adresses[1024][128]
实际上是一个
char*
(它不是,但它比
char**
更接近它)

双尺寸存取器实际上只是
[x+y*width]
的语法糖

要将数组作为参数传递,请使用:

int getAdresses(char (*adresses)[128])

所以一个二维数组再次出现…这只是一个警告,所以代码至少应该可以工作。我只是认为从文件中读取未绑定的内容不是一个好主意。如果您尝试读取1024个以上的字符串,您认为会发生什么?编译器告诉你错误的地方。这是一个警告,因为你的意思可能是传递错误的类型,但是如果你不理解这个警告,那么你应该将它视为致命的。
while(fgets(adresses[i], 128, fr)) i++;
char adresses[1024][128]
int getAdresses(char (*adresses)[128])