【问题标题】:char array assignment in a loop in C?C中循环中的char数组赋值?
【发布时间】:2017-03-21 14:14:26
【问题描述】:

所以我知道这与指针和/或内存分配有关,但我不太确定如何解决它。出于某种原因,下面的代码什么也不打印,而它应该打印文件中的第一个字符(由路径“文件名”指定)。

    int text[1000] = {};  

    FILE *fp;
    fp = fopen( filename, "r" );
    int i = 0;
    while(1) {
        int c = fgetc(fp);
        if ( c==EOF ) {
            break;
        } else {
            text[i] = c;  
        }
    }

    printf ( "%c", text[0] );

谢谢!

【问题讨论】:

  • 你永远不会增加i,所以你只保存text[0]中的字符;因此,您只需要使用printf() 编写最后一个字符(可能是换行符)。您只能通过在输出中看到一个空行来发现换行符。如果(何时)增加i,您还应该担心将太多字符读入数组,并且您可能应该打印字符串而不是只打印一个字符。否则,您可以将第一个字符读入变量,然后简单地读取其他字符并丢弃它们。并且你应该在使用fp之前检查fopen()是否成功。
  • 将 %c 更改为 %d,您将知道您存储在 text[0] 中的字符的代码(ASCII 码)以及为什么没有看到任何内容。

标签: c arrays loops char


【解决方案1】:

你不增加 i,所以你总是更新 text[0],最后它在 text[0] 处只有 '\n'。所以它不会打印任何东西。

#include<stdio.h>

int main()
{

    char text[1000] = {};  

    FILE *fp;
    fp = fopen(filename, "r" );
    int i = 0;
    while(1) {
        char c = fgetc(fp);
        if ( c==EOF ) {
            break;
        } else {
            text[i++] = c;  
        }
    }

    printf ( "%c\n", text[0]);
}

这是正确的使用方法。

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 2012-08-23
    • 1970-01-01
    • 2021-05-02
    • 2016-01-17
    • 1970-01-01
    • 2017-08-04
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多