首页 > 解决方案 > C中的奇怪打印问题

问题描述

我正在帮助一个学生程序员编写一个简单的程序,遇到了一个令人困惑的问题。输出应该如下所示:

###########
##  cat  ##
###########

但结果却是这样的:

################
##  catr+]U  ##
################

关于它的奇怪之处不一定是输出本身,而是当我在 main 开头添加一些填充代码时问题得到解决的事实。例如, main 最初看起来像这样:

int main() {
    char s[] = {'c','a','t'};
    frameText(s);
}

结果输出错误。但是,我将其更改为如下所示:

int main() {
    int k = 0;
    k++;
    k++;
    printf("%d I am confused\n", k);
    char s[] = {'c','a','t'};
    frameText(s);
}

这个问题得到了解决。我以前从未遇到过这样的事情,我无法弄清楚发生了什么。这是完整的程序,以防万一。

#include <stdio.h>
#include <string.h>

void frameText( char s[] ) {
    int len;
    len = strlen(s);
    s[len] = '\0';

    for (int k = 0; k < len + 7; k++) {
        printf("#");
    }
    printf("\n");

    printf("##  %s  ##\n",s);

    for (int k = 0; k < len + 7; k++) {
        printf("#");
    }
    printf("\n");
}

int main() {
    int k = 0;
    k++;
    k++;
    printf("%d I am confused\n", k);
    char s[] = {'c','a','t'};
    frameText(s);
}

标签: c

解决方案


C 中的字符串由 null-character 终止'\0',因此您必须将其添加到数组中。

利用

    char s[] = {'c','a','t','\0'};

或者

    char s[] = "cat";

代替

    char s[] = {'c','a','t'};

另一种方法是明确指定要打印的长度。

#include <stdio.h>

void frameText( char s[], int len ) {

    for (int k = 0; k < len + 8; k++) {
        printf("#");
    }
    printf("\n");

    printf("##  %.*s  ##\n",len,s);

    for (int k = 0; k < len + 8; k++) {
        printf("#");
    }
    printf("\n");
}

int main() {
    int k = 0;
    k++;
    k++;
    printf("%d I am confused\n", k);
    char s[] = {'c','a','t'};
    frameText(s, sizeof(s));
}

#此外,您在上下行的打印也比预期的少 1 个字符。我还以“另一种方式”解决了这个问题。


推荐阅读