簡體   English   中英

使用帶有char *類型的fgets()

[英]Using fgets() with char* type

我有一個關於將fgets()與char * string一起使用的簡單問題。

....
char *temp;
FILE fp=fopen("test.txt", "r");

fgets(temp, 500, fp);
printf("%s", temp);
....

這段代碼效果不好。

但是在我將char *temp修改為char temp[100]; ,代碼運行良好,我打算。

這兩者有什么區別?

當我用Google搜索它時,有人說必須使用malloc()將內存分配給char * ...

但我無法理解。

char * temp只是一個指針。 在開始時它不指向任何東西,可能它具有隨機值。

fgets()從fp讀取500個字節到內存地址,這個臨時指針指向! 因此,它可以覆蓋事物,它可以使分段錯誤,並且只有非常低的機會才能正常工作。

但char temp [500]是一個500字節長的數組。 這意味着,編譯器會在進程開始時(或在調用函數時)進行分配。 因此,這500字節將是一個可用的500字節,但它有一個價格:你不能重新分配,調整大小,免費等等。

谷歌想要你的是這樣的:

char *temp = (char*)malloc(500);

還有一個

free(temp);

在你不再需要它之后。

char *temp未初始化,也就是說,它沒有指向有效的內存。 要么使它成為一個數組( char temp[] ),要么使用malloc為它分配內存。

當我們寫作

char *temp ; 

它表示temp是一個未初始化的指向char指針,即當前它不包含任何地址。

在使用fgets您必須傳遞一個字符串,其中要復制從文件指針讀取的字節。 鏈接因為temp未初始化, fgets看起來像這樣

fgets(<no string> , 500 , fp ) ;

這是無效的。

因此,我們應該給出初始化的字符串,可以形成如下:

1) char *temp = malloc(sizeof(500)) ;
or
2) char temp[500] ;

因此,如果我們將初始化的字符串傳遞給fgets ,它看起來就像

fgets( < some string > , 500 , fp) ;

暫無
暫無

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

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