2017-06-18 95 views
-3

我在尽我所能去理解memchr函数,但有一些简单输出的问题。我在* newchar的末尾添加了额外的字符。memchr返回意外字符

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

int main() { 
    char plus[6] = "12+123";  
    char *newchar = (char*) memchr(plus,43,3); 
    printf("%s",newchar); 
} 

输出:

+123(' 

我有望获得 “+123”,为什么它给我多余的字符?我注意到输出是一致的,这让我更早感到困惑,它似乎并不是从内存中随机取出的,而是由memchr函数引起的。

+2

请记住,在C字符串是真的叫***空值终止字符串***。 –

+0

你不需要演员表 –

+0

你为什么用'43'而不是''+''? –

回答

1
char plus[6] = "12+123"; 

您已经定义了大小为6的数组,并使用6个字符对其进行了初始化。你没有留下足够的空间来容纳NUL终结者。字符串末尾有垃圾,printf不知道何时停止打印。

而是执行此操作,使字符串自动适当大小:

char plus[] = "12+123"; 
+0

请不要发布只显示印刷问题或缺少字符的答案。这些答案不可能帮助未来的访问者,因为它们是针对OP的代码的。相反,按照[help/on-topic]标记或投票结束问题。 – Olaf

+0

通常我同意。然而,在这种情况下,它不仅仅是一个简单的印刷错误。事实证明,解决一个基本的误解只需要一个字符的改变。 –

+0

海报需要知道语言基础知识。 C“字符串”的惯例是这些基本原理之一。删除'6'或添加'1'可以被认为是拼写错误。 (并不是说被委托人没有做出任何让C11不合法的遗留初始者非法的行为)。 – Olaf