2017-06-18 88 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