c - 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 中的字符串由 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 个字符。我还以“另一种方式”解决了这个问题。
推荐阅读
- pygame - 您如何解决:“IndexError:列表索引超出范围”?
- c++ - boost::asio::bind_executor() 行为,是有意的吗?
- perforce - 如何在 Ubuntu 上删除 perforce (p4)
- javascript - 根据条件更改 ID CSS
- php - PHP 杠杆 FatalErrorException
- javascript - 避免 useEffect 在第一次加载时渲染?
- r - 如何重命名图例并在 R 中包含调色板
- google-chrome - 是否可以在 Puppeteer 中模拟没有 javascript 的移动设备?
- python - 如何在 Apache Beam/Google 数据流中将大窗口缩减为小窗口?
- xamarin - 未从 B2C 登录返回