首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么在C中数字'7‘打印在我的字符串后面?

为什么在C中数字'7‘打印在我的字符串后面?
EN

Stack Overflow用户
提问于 2013-01-26 13:15:50
回答 3查看 137关注 0票数 2

我需要定义一个数组中的字符,并打印它总是打印为string7 (在本例中为test7)的string...But (在本例中为test7)...What我做错了吗?

代码语言:javascript
复制
#include <stdio.h>
int main() {
    char a[]={'t','e','s','t'};
    printf("%s\n",a);
    return 0;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-26 13:16:54

为什么会出现这种行为?

因为您没有终止您的阵列,所以您得到的是 \0

幕后会发生什么?

printf尝试打印字符串,直到遇到\0为止,在本例中,字符串从未以\0结尾,所以它会随机打印,直到遇到\0为止。

请注意,超出分配的内存界限的读取是未定义的行为,因此从技术上讲,这是一个UB。

你需要做什么来解决这个问题?

您需要:

代码语言:javascript
复制
char a[]={'t','e','s','t',`\0`};

代码语言:javascript
复制
char a[]="test";
票数 13
EN

Stack Overflow用户

发布于 2013-01-26 13:16:40

因为您的"string“或char[]不是以null结尾的(即以\0结尾)。

然后,printf("%s", a);将尝试打印从a开头开始的每个字符,并继续打印,直到看到\0为止。

这个\0在你的数组之外,并且依赖于你的程序内存的初始状态,而你几乎无法控制它。

要修复此问题,请使用

代码语言:javascript
复制
char a[]={'t','e','s','t','\0'};
票数 2
EN

Stack Overflow用户

发布于 2013-01-26 13:17:40

您打印的字符串必须为空,您的字符串声明应为terminated...so,

代码语言:javascript
复制
char a[]={'t','e','s','t', '\0'};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14534098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档