我昨天開始學習C,所以這可能是一個微不足道的問題,但我仍然不明白。在小數組中排列兩個字符串時的段錯誤
比方說,我有以下代碼:
#include <stdio.h>
#include <string.h>
int main()
{
char text[8];
strcpy(text, "Lorem ");
puts(text);
strcat(text, "ipsum!");
puts(text);
return 0;
}
這將導致分段故障時(或之後)concating的字符串。但是,如果我將text
的大小從8更改爲9,則不會。
請糾正我,如果我錯了,但是這是我的想法是正確的: - !「文字」
「排版」大小6(或7 \ 0)
- 大小6(或7與\ 0)
「Lorem ipsum!」 - 大小12(或13與\ 0)
那麼,8/9從哪裏來?這是由執行strcat
引起的嗎?還是有最小數組長度的東西?還是我犯了一個愚蠢的初學者的錯誤?
在此先感謝。
[未定義行爲(http://en.wikipedia.org/wiki/Undefined_behavior) –
運行此Valgrind的下(http://valgrind.org),你會看到有一個問題,在這兩個案例。 – alk
對於你的問題「8/9來自何處」的回答,你的特定編譯器完全有可能以8字節塊爲單位分配內存。所以text [8]會分配8個字節;文本[9]將四捨五入到16個字節。當然這是依賴於實現的,你永遠不應該指望一個編譯器總是這樣做! –