我有以下代碼:傳遞一個字符串的函數用C
#include <stdio.h>
char * lookLine (FILE *fichero)
{
char p[25];
fgets (p, sizeof (p), fichero);
return p;
}
int main (void) {
printf ("%s\n", lookLine (fopen ("suma.c", "r")));
return 0;
}
而且我得到以下輸出:
#��x�
不是很好。我的意圖是打印出名爲「suma.c」的文件的第一行。它應該打印出以下幾點:
#include <stdio.h>
不過,如果我打印出p
字符串的內容到同一個lookFile
功能,但它確實是罰款:
#include <stdio.h>
void lookLine (FILE * fichero)
{
char p[25];
fgets (p, sizeof (p), fichero);
printf ("%s\n", p);
}
int main (void) {
lookLine (fopen ("suma.c", "r"));
return 0;
}
和輸出我現在得到的是正確的:
#include <stdio.h>
我的理由是這樣的:通過使用fgets
我救「name.c」的第一行的字符串中的p
數組,我返回它的地址,該地址由main
中的printf
函數的第二個參數獲取。
但我發現,這只是工作的時候我直接使用printf
功能到同一個lookLine
功能...
請,有人能告訴我這是怎麼回事嗎?
首先,不要使用爲用戶定義的函數讀取的名稱。這是C語言中的一個標準函數,它可能被用作fread,fget等的低級函數。如果沒有其他的東西,那麼讀者將會讀取你的代碼。 – anishsane
可能重複[返回字符\ [\] /字符串從函數](http://stackoverflow.com/questions/14416759/return-char-string-from-a-function) – user93353
其次,我希望這只是一個測試代碼。因爲這有嚴重的泄漏。 – anishsane