簡體   English   中英

加入2個const char * s c ++

[英]joining 2 const char*s c++

如何將兩個const char * s組合成第三個?

我正在嘗試使用此代碼執行此操作:

const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
const char* nName;
int num_chars = asprintf(&nName, "%s%s", "Somebody known as ", pName);

但我得到這個錯誤:

'asprintf': identifier not found

我通過以下代碼包含stdio.h:

#include <stdio.h>

簡單,只需使用C ++:

const char* pName = "Foo"
std::string name("Somebody known as ");
name += pName;

const char* nName = name.c_str();

asprintf是一個GNU擴展。 您可以使用snprintfstrncat ,但您需要自己處理內存管理: asprintf為您分配結果。

最好使用std:string ,這將使代碼更容易。

sprintf(snprintf)或strcat(strncat)。 sprintf的。

sprintf(nName, "%s%s", "Somebody known as ", pName);

strcat的。

strcpy(nName, "Somebody known as ");
strcat(nName, pName);

我將假設你使用C,除此之外你已經將這個問題標記為C ++。 如果你想要C ++,請參閱Luchian的回答。

代碼中的錯誤很少 - 更大的錯誤是您沒有為pName指定字符串指定內存。 第二個錯誤是您正在獲取nName變量的地址,而不是asprintf函數中的保留內存位置的地址。 第三個錯誤是asprintf函數不是標准的C函數,但GNU擴展可能在你的編譯器上沒有(你沒說的是): http//linux.die.net/man/3/asprintf

你應該使用這樣的東西:

#include <stdio.h>
const char* pName = "Foo"
printf("\nMy name is %s.\n\n\n",pName);
char nName[30];
int num_chars = sprintf(nName, "%s%s", "Somebody known as ", pName);

編輯 :我現在已經閱讀了更多關於asprintf函數的內容。 你應該在asprintf傳遞指針的asprintf ,但它不應該是const char *而是char* ,因為它指向的內存位置會在asprintf分配足夠的內存后發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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