簡體   English   中英

fgets錯誤和C上的字符串聲明樣式

[英]fgets error and strings declaration style on c

我對一件事感到好奇,以下代碼可以完美運行。

#include <stdio.h>
int main()
{
  FILE * fp = fopen("test.txt", "r");
  char line[100];

  while( fgets(line, sizeof(line), fp) != NULL )
    fputs(line, stdout);
  fclose(fp);
  return 0;
}

但是為什么不能使用它呢:

char *line;

不會導致fget崩潰?

有可能的。 只需將其指向一些有效的內存即可。

char line[100];
char* linep = line ;
while( fgets(linep, sizeof(line), fp) != NULL )...

如果您不將行分配給linep,則linep指向隨機內存,您將無法使用它。

fgets崩潰是因為它將結果寫入未分配的內存中

沒有任何進一步的內存分配, char *line指向“ nothing”。 它指向某個內容 ,但不指向任何有效的內存位置-如果編譯器將未初始化的值設置為0 ,則指向null ,或者指向系統上任何位置或不在系統上的任何隨機內存位置。

即使fgets 不會崩潰,你無法預測它做什么的寫入未定義的行為未分配的內存結果( 什么是未定義行為? )。

char *linechar line[100]含義不同。 第一個是指向char的指針,我們不知道它是單個char還是指向的char數組。 另一方面,第二個是數組。

fgets需要一個有效的位置來寫入。 在這種情況下, char *line沒有指向的有效位置,而char line[100]是有效的char數組位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM