如何将字符组成内存中的单个字符串?

时间:2011-11-25 19:54:07

标签: c string putchar

我正在完成一项学校任务,我需要一些帮助。

我的问题是,如何将从文件读入的字符组合成单个字符串的内存。这是我到目前为止所做的。

我的代码:

#include <stdio.h>
#include <stdlib.h>
char myString;

int main(int argc, char *argv[]){
    FILE* fin;
    char ch;

    fin=fopen(argv[1],"r");
    while((ch=fgetc(fin))!=EOF){
            printf("%c\n", ch);
    }
    fclose(fin);
    return 0;
}

我的老师说主要的最后一部分是:

   putchar(‘\n’);    
   printf( myString );
   return 0;
}

但我不确定如何将其放入我的代码中。提前谢谢你,如果你能帮助我解决这个问题,我也不希望得到答案。非常感谢你。

更新的代码:

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


int main(int argc, char *argv[]){
    FILE* fin;
    int i;
    char myString[3];

    fin=fopen(argv[1],"r");
    while(fgets(myString,sizeof(myString), fin)){

            putchar('\n');
            printf("%c\n", myString[i]);
    }
    fclose(fin);
    return 0;
}

我不确定此代码是否完全正确。它打印出文件中的项目并在它们之间放置一个空格。并且有一个数组用于字符串。

4 个答案:

答案 0 :(得分:4)

  

我也不希望得到答案

精细。

  • 定义一个足够大的char数组(mystring)来保存您的字符串
  • 定义计数器以跟踪数组中的位置
  • 在每个步骤将ch存储到数组
  • 请记住0终止它(将0存储为最后一个元素)。

注意事项:

  • 如果您的程序要读取任意长的输入,您将需要了解realloc并随时增加存储空间。最好留待以后
  • printf(dynamicstr)通常不安全。如果它包含"%d"怎么办?最好printf("%s", dynamicstr)

答案 1 :(得分:0)

你可以了解memcpy和malloc。他们是你的朋友。

- 詹森

答案 2 :(得分:0)

你需要阅读教科书中适用的部分来解释C中的“字符串”。如果没有你的理解,几乎没有办法回答你的问题,而不是简单地为你做。

C“字符串”是包含char s并且NULL终止的连续内存块。您需要分配它,然后在从文件中读取字符时将字符放入其中。请注意,您必须确保在执行此操作时不要超出已分配的内存,这称为“缓冲区溢出”。

答案 3 :(得分:0)

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

char* myString;
int main(int argc, char *argv[]){
    FILE* fin;
    fpos_t fsize = 0;
    char ch;
    char *pch;

    fin=fopen(argv[1],"r");
    fseek(fin,0,SEEK_END);
    fgetpos(fin, &fsize);
    rewind(fin);
    pch = myString = (char*)malloc((fsize+1)*sizeof(char));
    while((ch=fgetc(fin))!=EOF){
            *pch++ = (char)ch;
    }
    *pch = '\0';
    fclose(fin);
    printf("%s", myString);//printf(myString);// need escape %
    free(myString);
    return 0;
}