C 使用FGET读取文件时出现段错误

C 使用FGET读取文件时出现段错误,c,gdb,C,Gdb,我在使用fgets()时遇到了段错误。有人知道哪里可能是错的吗?谢谢 以下是我的部分代码: char buf[1024]=""; char str[32]; char line[32]; in = fopen(argv[1], "r"); while(fgets (line, sizeof(line), in) != NULL){ zero_pad(line, str); // padding 0s to the line strcat(

我在使用fgets()时遇到了段错误。有人知道哪里可能是错的吗?谢谢 以下是我的部分代码:

char buf[1024]="";
char str[32];
char line[32];

in = fopen(argv[1], "r");

while(fgets (line, sizeof(line), in) != NULL){          
        zero_pad(line, str);  // padding 0s to the line
        strcat(buf, str);
        printf("\nBuffer: %s\n", buf);
}
这是zero_pad函数:(如果字符串长度小于位数,它将只查找位数,在前面加0)

我也试过了

以下是最后几行:

putchar(65, 0x7fffd69cb460, 0, 0x7fa52aa5fa50)   = 65
printf("\nBuffer: %s\n", "0001000100010000000000001111"A
Buffer: 0001000100010000000000001111
) = 38
putchar(67, 0x7fffffda, 0x7fa52ad809e0, 37)      = 67
fgets( <no return ...>
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
putchar(65,0x7fffd69cb460,0,0x7fa52aa5fa50)=65
printf(“\n缓冲区:%s\n”,“00010000100000000001111”A
缓冲区:00010000100000000001111
) = 38
putchar(67,0x7fffffda,0x7fa52ad809e0,37)=67
fgets(
---SIGSEGV(分段故障)---
+++被西格夫杀死+++
此处:

void zero_pad(char line[], char res[]){
   int num_bits, i;
   char *tmp;
   char *bin_str;
   if(line[strlen(line)-1]=='\n')  line[strlen(line)-1]='\0';
   //split by space
   tmp = strtok(line, " ");
   strcpy(bin_str, tmp);
…您的
strcpy()
正在尝试将
tmp
的内容复制到未初始化指针
bin\u str
指向的位置

如果您愿意假定单词的最大长度(可能基于
main()
函数中声明的数组大小),那么您可以这样声明:

char bin_str[32];

知道实际打开的文件可能会非常有利。在假设中的
不为空之前,我们先检查一下如何。谢谢你的回答。我尝试了一下,但仍然出现了段错误。程序实际上可以读取文件的内容。只需在读取内容后进行SEGFULT。为什么要麻烦将缓冲区初始化为“”?@chris
strcat(buf,str);
在文档中没有说你需要。我想的是他放在缓冲区中的\0可能干扰了strcat。
void zero_pad(char line[], char res[]){
   int num_bits, i;
   char *tmp;
   char *bin_str;
   if(line[strlen(line)-1]=='\n')  line[strlen(line)-1]='\0';
   //split by space
   tmp = strtok(line, " ");
   strcpy(bin_str, tmp);
char bin_str[32];