2015-10-13 74 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'; 

} 
相关问题