[英]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.