2015-10-13 52 views
0

你好我試圖做一個簡單的程序,將讀取文本和存儲到一個字符串,並最終返回到我稱爲我的功能。我到目前爲止是這樣的:閱讀文件並存儲到一個字符串

void crawler() { 


FILE *file; 
char line[256], letra[256]; 
int j = 0; 
file = fopen("teste.txt", "r"); 

letra[j] = fgetc(file); 
j++; 

while (fgets(line, sizeof(line), file)) { 

    for(int i = 0; line[i] != 00; i++) 
    { 
     if(line[i] == 46) 
     { 
      if(line[i+1] == 46) 
      { 
       letra[j] = " "; 
       j++; 
      } 
     } 
     else 
     { 
      letra[i] = line[i]; 
      j++; 
     } 
    } 
} 

但我不知道這是否是正確的方法。我應該使用malloc做一個動態Char嗎?我試圖做什麼的最佳方法是什麼?

[編輯]

即時得到在這一行錯誤:letra[j] = " ";

兼容的指針到整數的轉換

+0

你不返回任何東西,也不要被誘惑來回報您的緩衝區的地址,因爲它是在堆棧上,而且將成爲無效儘快你回來。所以是的,我會'malloc'一個緩衝區。 –

+0

你爲什麼要移動讀取的數據?首先你將它讀入'line'中,然後將它複製到'letra'中。爲什麼和爲了什麼? – ForceBru

+0

關於46的特別之處是什麼? – chux

回答

0

你得到一個錯誤,因爲" "是一個字符串和你」試圖將其分配給char數據類型。在C中,字符串由指針char *數據類型處理。您不能將指針轉換爲不同的數據類型,因此會導致錯誤。

你應該這樣做,而不是:

while (fgets(line, sizeof(line), file)) { 

    for(int i = 0; line[i] != 00; i++) 
    { 
     if(line[i] == 46) 
     { 
      if(line[i+1] == 46) 
      { 
       letra[j] = ' '; 
       j++; 
      } 
     } 
     else 
     { 
      letra[i] = line[i]; 
      j++; 
     } 
    } 
} 

我也看到了letra[i] = line[i];一個潛在的危險,但是這不是你的問題是什麼。

個人注意事項:您可以輕鬆地在charint數據類型之間進行類型轉換,因爲它們都是存儲字節。在計算之前,通過將它們轉換爲int可以很容易地用字母做一些數學運算。

+0

重申你的最後一段:在算術運算之前''char'和'short'被提升爲'int'。字面值「a」是類型「int」。 –

+0

@WeatherVane我認爲'int'數據類型是8位,但是你建議'short'是8,'int'是16?自從我編寫處理數字的C編程已經有一段時間了。我的大部分東西都是字符串解析和命令處理。 –

+0

「int」不小於16位,但更通常爲32或64位。 –

0

希望這能解決你的問題,

#include<stdio.h> 

FILE *pfile; 
char fileData[200],letter; 
int ind; 

void storeData(); 

int main() 
{ 
storeData(); 
printf("Data From File:\n"); 
printf("%s",fileData); 
return 0; 
} 

void storeData() 
{ 

    ind=0; 
    pfile=fopen("textf.txt","r"); 
    while((letter=fgetc(pfile))!=EOF) 
    { 
    fileData[ind]=letter; 
    ind++; 
    } 
    fileData[ind]='\0'; 

} 
相關問題