我正在嘗試自己實作 strcat 函式。這是我的代碼:
char *my_strcat(char *dst, const char* src) {
char *tmp = dst;
while(*tmp) {
tmp ;
}
while(*tmp = *src );
return dst;
}
但是,當我嘗試測驗這個函式時,我只得到 src 字串。(即我期望得到dst src,但回傳值與src相同)
從代碼中我們可以看出,在第一個 while 回圈中,我試圖將 tmp 指標移動到 dst 的末尾。然而,
我試圖在第一個while回圈中添加一個printf,沒有列印出來,這表明它甚至沒有進入回圈。
然后我嘗試使用
if (*tmp == '\0') print something,發現*tmp == '\0'是真的。
但我很確定 tmp 是一個非空字串,所以*tmp應該指向字串的第一個字符(我認為)。所以我對此感到困惑。誰能說出為什么會發生這種情況以及我該如何解決?
編輯:呼叫代碼是
char *subpath = "";
subpath = my_strcat(subpath, path);
path是const char*從命令中讀取的。我需要將值分配回子路徑嗎?還是打電話my_strcat就夠了?
uj5u.com熱心網友回復:
這里有兩個問題:
char *subpath = "";
subpath = my_strcat(subpath, path);
- subpath 指向長度為 0 的字串,沒有足夠的空間來追加任何內容。
- 子路徑指向字串文字,寫入字串文字是未定義的行為,在現代桌面平臺上,您的程式通常會崩潰。
你想要這樣的東西:
char subpath[100] = "";
char *foo;
foo = my_strcat(subpath, path);
要不就
char subpath[100] = "";
my_strcat(subpath, path);
要么
char subpath[100] = "Hello ";
my_strcat(subpath, "world!");
printf("%s\n", subpath); // prints Helllo World!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456699.html
