[英]C - string concatenation with pointers
為什么以下字符串連接不起作用?
main()
{
char *str1 = "United";
char *str2= "Front";
char *str3;
str3 = strcat(str1, str2 ) ;
printf("\n%s",str3 );
}
我在一本關於指針的書中的練習題中遇到了這個問題。 問題提到
[Q] 代碼是否正確(如果不正確),並更正代碼。
請參閱我對c 中字符數組的串聯問題的回答
您不能更改字符串文字。
這個說法
str3 = strcat(str1, str2 ) ;
嘗試更改字符串文字str1
並且嘗試寫入超出字符串文字的內容。
要制作連接字符串,您必須分配足夠大的內存以包含兩個字符串。
您需要的是以下內容
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
const char *str1 = "United";
const char *str2 = "Front";
char *str3 = malloc( strlen( str1 ) + strlen( str2 ) + 1 );
strcpy( str3, str1 );
puts( strcat( str3, str2 ) );
free( str3 );
return 0;
}
程序輸出是
UnitedFront
當您編寫char* s = "something"
,會分配一塊只讀內存。 更多關於這里。
strcat
的聲明如下所示:
char *strcat( char *dest, const char *src );
基本上它會做的是將src
附加到dest
,但是由於您的目的地, str1
沒有足夠的內存來保存兩個字符串。
所以我要做的是,使用帶有預分配緩沖區的snprintf
或:
char *str1 = "United";
char *str2 = "Front";
char *buf = calloc(strlen(str1) + strlen(str2) + 1, sizeof(char));
strncpy(buf, str1, strlen(str1));
strncat(buf, str2, strlen(str2));
printf("%s", buf);
或使用snprintf
:
char *str1 = "United";
char *str2 = "Front";
int buf_len = strlen(str1) + strlen(str2) + 1;
char *buf = calloc(buf_len, sizeof(char));
snprintf(buf, buf_len, "%s%s", str1, str2);
strcat
的第一個參數(在你的例子中是str1
)需要有足夠的分配內存來保存連接的字符串。 您可以使用malloc
創建它,也可以將其聲明為一個足夠大的數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.