[英]Segmentation fault in string concatenation using pointers
我試圖連接存儲在字符指針中的兩個字符串,但我做錯了。 有人可以指出它是什么嗎? 另外,我沒有故意使用任何內置功能。
int main()
{
char *a = "abc";
char *b = "def";
char *c;
while(*a != '\0')
{
*c = *a;
a++;
c++;
}
while(*b != '\0')
{
*c = *b;
b++;
c++;
}
*c = '\0';
c -= 6;
while(*c!= '\0')
{
printf("%c", *c);
c++;
}
return 0;
}
你沒有為c
分配任何內存
當你這樣做時, b
和c
靜態分配內存:
char *a = "abc";
char *b = "def";
但是c沒有那個,所以你需要使用類似的東西來分配內存:
char *c = malloc (x);
其中x
是您需要容納要插入的字符的字符數組的總長度(加1,終止NULL)。 你還需要記住在某個地方free ()
它。
由於你沒有做任何分配,這一行:
*c = *a;
將產生未定義的行為。
c
未初始化。 您必須在復制值之前對其進行初始化。 例如:
char *c = malloc(strlen(a) + strlen(b) + 1); /* plus 1 for terminating null byte */
if (!c) {
perror("malloc");
exit(EXIT_FAILURE);
}
其他問題是您在打印時沒有增加c
:
while(*c!= '\0')
{
printf("%c", *c);
c++;
}
請注意這個聲明
c -= 6;
這里很好,但不是很可讀。 最好使用臨時指針來保存c
的初始位置,這樣就不需要這樣做了。
如果你不能使用標准的strlen
函數,那么你可以直接自己實現它。
char *c;
使用此行,您可以定義一個變量c
,它是指向char
的指針。 很明顯,你的想法是在其中存儲字符串a
和b
的串聯; 但是,要做到這一點,你需要為結果'a+b'
(串聯)字符串提供一些內存 。
你要做的是為目標字符串分配足夠的內存,計算要連接的兩個源字符串中的字符,以及終止NUL
( \\0
)。 在您的情況下,結果字符串需要3 + 3 + 1 = 7
char
。
您可以在堆棧上分配它們,如下所示:
char result[7];
或者使用malloc()
動態分配。 在這種情況下,您還需要釋放調用free()
的內存。
您正在收到錯誤,因為指針c未初始化。
int main()
{
char *a = "abc";
char *b = "def";
char x ;
char *c = &x; //initializing pointer
while(*a != '\0')
{
*c = *a;
a++;
c++;
}
while(*b != '\0')
{
*c = *b;
b++;
c++;
}
*c = '\0';
c -= 6;
while(*c!= '\0')
{
printf("%c", *c++);//increment pointer
}
return 0;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.