[英]Concatenate two char* strings in a C program
我寫了以下C程序:
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
printf("%s", strcat(str1, str2));
return (EXIT_SUCCESS);
}
我想連接兩個字符串,但它不起作用。
它的工作方式是:
free (str3);
這是你玩的一個例子。 它非常簡單,沒有硬編碼長度。 你可以在這里試試: http : //ideone.com/d3g1xs
有關char大小的信息,請參閱此帖子
#include <stdio.h>
#include <memory.h>
int main(int argc, char** argv) {
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
char * str3 = (char *) malloc(1 + strlen(str1)+ strlen(str2) );
strcpy(str3, str1);
strcat(str3, str2);
printf("%s", str3);
return 0;
}
這是一個有效的解決方案:
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
char str1[16];
char str2[16];
strcpy(str1, "sssss");
strcpy(str2, "kkkk");
strcat(str1, str2);
printf("%s", str1);
return 0;
}
輸出:
ssssskkkk
您必須為字符串分配內存。 在上面的代碼中,我將str1
和str2
聲明為包含16個字符的字符數組。 我用strcpy
字符串文字的字符復制到他們, strcat
到的字符追加str2
到年底str1
。 以下是這些字符數組在程序執行期間的外觀:
After declaration (both are empty):
str1: [][][][][][][][][][][][][][][][][][][][]
str2: [][][][][][][][][][][][][][][][][][][][]
After calling strcpy (\0 is the string terminator zero byte):
str1: [s][s][s][s][s][\0][][][][][][][][][][][][][][]
str2: [k][k][k][k][\0][][][][][][][][][][][][][][][]
After calling strcat:
str1: [s][s][s][s][s][k][k][k][k][\0][][][][][][][][][][]
str2: [k][k][k][k][\0][][][][][][][][][][][][][][][]
strcat
將str2
連接到str1
您將獲得運行時錯誤,因為未正確分配str1
進行連接
當您使用字符串文字時,例如"this is a string"
,在您的情況下為"sssss"
和"kkkk"
,編譯器會將它們放在只讀內存中。 但是, strcat
嘗試在第一個參數之后寫入第二個參數。 您可以通過制作足夠大小的目標緩沖區並寫入它來解決此問題。
char destination[10]; // 5 times s, 4 times k, one zero-terminator
char* str1;
char* str2;
str1 = "sssss";
str2 = "kkkk";
strcpy(destination, str1);
printf("%s",strcat(destination,str2));
請注意,在最近的編譯器中,您通常會收到將字符串文字轉換為非常量字符指針的警告。
strcat(str1, str2)
在str1之后追加str2。 它要求str1有足夠的空間來容納str2。 在你的代碼中,str1和str2都是字符串常量,所以它不應該工作。 你可以這樣試試:
char str1[1024];
char *str2 = "kkkk";
strcpy(str1, "ssssss");
strcat(str1, str2);
printf("%s", str1);
strcat
嘗試將第二個參數追加到第一個參數。 由於您要分配隱式大小的常量字符串,因此這不起作用。
如果您只想打印兩個字符串
printf("%s%s",str1,str2);
會做。
你可以做點什么
char *str1 = calloc(sizeof("SSSS")+sizeof("KKKK")+1,sizeof *str1);
strcpy(str1,"SSSS");
strcat(str1,str2);
創建連接字符串; 但是強烈考慮使用strncat / strncpy。 並仔細閱讀上面的手冊頁。 (哦,不要忘記最后free
str1)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.