如何在字符串中保存文本文件的内容

时间:2017-01-04 13:55:59

标签: c file c-strings

这是代码为什么当我在输出中显示字符串时我有所有单词但在最后一行中有一个奇怪的符号,一个ASCII随机符号......

我的目标是在字符串中保存所有与其一起操作的单词。

例如我有这个文件:

Mario


Paul


Tyler

如何保存字符串中的所有单词?

#include <stdio.h>
#include <stdlib.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
    int l,i=0,j=0,parole=0;
    char A[10][10];
    char leggiparola;
    char testo[500];
    FILE*fp;
    fp=fopen("parole.txt","r");
    if(fp!=NULL)
    {
        while(!feof(fp))
        {
            fscanf(fp,"%c",&leggiparola);
            printf("%c", leggiparola);
            testo[j]=leggiparola;
            j++;
        }  
    }
    fclose(fp);
    printf("%s",testo);
    return 0;
}

3 个答案:

答案 0 :(得分:1)

除了while(!feof(fp)) being "always wrong",你错过2017-01-04 14:57:10.755 ERROR 8236 --- [http-apr-8080-exec-4] com.example.LogApplication : Error Logging - 终止结果字符串。

这样做放一个

0

testo[j] = '\0' - 循环之后。

答案 1 :(得分:1)

不要使用fscanf,请尝试使用getc:

int leggiparola; /* This need to be an int to also be able to hold another 
                    unique value for EOF besides 256 different char values. */

...

while ( (leggiparola = getc(fp)) != EOF)
{
   printf("%c",leggiparola);
   testo[j++] = leggiparola;
   if (j==sizeof(testo)-1)
       break;
 }
 testo[j] = 0;

答案 2 :(得分:0)

这里的fslurp。由于需要手动增长缓冲区,我有点乱。

/*
  load a text file into memory

*/
char *fslurp(FILE *fp)
{
  char *answer;
  char *temp;
  int buffsize = 1024;
  int i = 0;
  int ch;

  answer = malloc(1024);
  if(!answer)
    return 0;
  while( (ch = fgetc(fp)) != EOF )
  {
    if(i == buffsize-2)
    {
      if(buffsize > INT_MAX - 100 - buffsize/10)
      {
          free(answer);
          return 0;
      }
      buffsize = buffsize + 100 * buffsize/10;
      temp = realloc(answer, buffsize);
      if(temp == 0)
      {
        free(answer);
        return 0;
      }
      answer = temp;
    }
    answer[i++] = (char) ch;
  }
  answer[i++] = 0;

  temp = realloc(answer, i);
  if(temp)
    return temp;
  else
    return answer;
}