在c中打印字符串后出现意外结果[重复]

Posted

技术标签:

【中文标题】在c中打印字符串后出现意外结果[重复]【英文标题】:Unexpected result after printing a string in c [duplicate] 【发布时间】:2022-01-19 12:40:02 【问题描述】:

代码是-

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

int main()

    FILE *filevar;
    filevar = fopen("file", "r");
    char copy [100];
    int i = 0;

    while(1)
    
        char ch = fgetc(filevar);
        if(ch==EOF)
        
            break;
        
        copy[i] = ch;
        i++;
    
    printf("\n%s", copy);
    fclose(filevar);
    return 0;

当我运行它时,我得到的输出是

textblabla■a

文件内容是-

文本blabla

更改文件内容会更改末尾的随机字符

【问题讨论】:

char ch 必须是 int ch 如果你想像printf("\n%s", copy);一样使用copy作为字符串,你必须在最后一个字符之后添加一个NUL字符('\0' Why does fgetc() return int instead of char? 【参考方案1】:

两个主要问题。

    ch 必须是 int 你没有空字符终止字符串
        int ch = fgetc(filevar);
        if(ch==EOF)
        
            copy[i] = 0;
            break;
        
        
        copy[i] = ch;
        i++;

【讨论】:

以上是关于在c中打印字符串后出现意外结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

顶部带有 %include 的程序集 - 打印输出意外结果:只是一个“S”

打印的字符串中出现意外的数字格式

编译 C 程序后 Eclipse CDT 意外输出

C语言字符串打印出现特殊字符是怎么回事?请问如何解决这个问题?

js查找字符串中重复最多的字母

纠错:C语言:删除重复字符。