在這里,我嘗試strcat在 C 中實作函式。問題是當我列印源字串時,它顯示我"hyam" 沒有"shyam"
#include <stdio.h>
#include <string.h>
char *fun(char *target, const char *source) {
printf("%s\n", source);
int x = strlen(target);
while (*source != '\0') {
*(target x ) = *source ;
}
*(target x) = '\0';
return target;
}
int main() {
char target[] = "ram";
char source[] = "shyam";
fun(target, source);
printf("%s\n", target);
printf("%s", source);
return 0;
}
此處hyam顯示了輸出的最后一行,但它應該是shyam.
shyam
ramshyam
hyam
uj5u.com熱心網友回復:
您的target陣列太小 - 它至少需要九個元素(兩個字串的長度加上一個終止零)。
在外部寫入target具有未定義的行為,但在實踐中,您的陣列看起來像是端到端的布局,如下所示:
|r|a|m|\0|s|h|y|a|m|\0|
^ ^
| |
target source
然后你連接,越過結尾targetinto source:
|r|a|m|s|h|y|a|m|\0|\0|
^ ^
| |
target source
這使它看起來像's'消失了。
(請注意這是undefined,所以任何事情都可能發生。你不能依賴這種行為,除非你的編譯器的檔案說它很好并且應該這樣做。它很可能不會。)
uj5u.com熱心網友回復:
問題是target定義的陣列char target[] = "ram";太短,無法容納附加source字串的內容。您必須使target更大,至少 8 個位元組:
char target[9] = "ram";
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/324783.html
