簡體   English   中英

C - 用指針連接字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM