【发布时间】:2021-01-30 13:07:09
【问题描述】:
我不知道为什么这个分段会出现在我的输出末尾
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char** FileOpen(char *path );
int main(void)
{
char **lines =FileOpen("filename");
for(int i = 0 ; i < strlen(*lines) ; i++)
printf("%s\n",lines[i]);
return 0 ;
}
char** FileOpen(char *path)
{
FILE * fileshow = fopen(path,"r");
if(!fileshow)
{
printf("erorr trying open file %s",path);
exit(1);
}
char** lines = malloc(100 * sizeof( char* ));
char buff[1000];
int i = 0 ;
while(fgets(buff,1000,fileshow))
{
//put null in end of str to show the end of string
buff[strlen(buff)-1]= '\0';
//geting string len to form the size of str
int slen = strlen(buff);
char *str = malloc(slen+1 * sizeof(char));
//copy the string into the str
strcpy(str,buff);
lines[i]= str;
i++;
}
return lines;
}
输出: 嘿,你好吗兄弟 嘿,你好吗兄弟 嘿哇 嘿,你好吗兄弟 嘿哇 嘿,所以 分段错误(核心转储)
【问题讨论】:
-
for(int i = 0 ; i < strlen(*lines) ; i++)看起来很可疑,lines中没有 NULL -
与您的问题无关,但请记住基本算术优先级:
slen+1 * sizeof(char)实际上是slen+(1 * sizeof(char))。在这种情况下,这并不重要,因为sizeof(char)被定义为始终为1。 -
输出很奇怪,因为 printf 中有一个 \n 而输出没有。
-
strlen(*lines)是第一行的长度。它不是文件中的行数。 -
至于您的问题,请使用 调试器 来捕捉崩溃发生的时间,并在您的代码中找到它发生的位置..
标签: c segmentation-fault