[英]Bus error in my own strcat using pointer
我正在做strcat
函數的指針版本,這是我的代碼:
void strcat(char *s, char *t);
int main(void) {
char *s = "Hello ";
char *t = "world\n";
strcat(s, t);
return 0;
}
void strcat(char *s, char *t) {
while (*s)
s++;
while ((*s++ = *t++))
;
}
這似乎很簡單,但是在我的Mac OS 10.10.3上運行時會出現總線錯誤。 我不明白為什么...
在你的代碼中
char *s = "Hello ";
s
指向位於只讀存儲器位置的字符串文字 。 所以,問題是雙重的
您應該使用長度足夠大的數組 (駐留在讀寫內存中)來保存結果(最終)字符串(不占用內存)。
建議:對於用戶定義的函數,請不要使用與庫函數相同的名稱。 使用其他名稱,例如my_strcat()
。
偽代碼:
#define MAXVAL 512
char s[MAXVAL] = "Hello";
char *t = "world\n"; //are you sure you want the \n at the end?
接着
my_strcat(s, t);
您要在最后一個addres s指向之后添加't'文本
char *s = "Hello ";
char *t = "world\n";
但是在's'之后寫入是未定義的行為,因為編譯器可能會將文本放在常量內存中,以您為例,它崩潰了,實際上確實如此。
您應該使用malloc或聲明其數組樣式來保留s指向的足夠內存
char s[32] = "Hello ";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.