C 将行读取到字符串数组
我试图使函数用文件中的行填充字符串数组,但编译器(GCC)仍然给我一个警告。如果我尝试运行已编译的应用程序,则会出现“分段错误”错误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]不同,后者是地址的类型 当您试图
源代码:
主要的
将
地址[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])