为什么我不能将两个字符串组合在一起?

时间:2013-10-08 09:04:38

标签: c string

 char* key;

 key=(char*)malloc(100);

 memset(key,'\0',100*sizeof(char));
 char*  skey="844607587";

 char* mess="hello world";


 sprintf(key,skey);

 sprintf(key,mess);
 printf("%s",key);
 free(key);

为什么打印输出只有“乱七八糟”没有skey?有没有其他方法可以使用C组合两个字符串?

7 个答案:

答案 0 :(得分:3)

sprintf(key,"%s%s",skey,mess);

单独添加:

sprintf(key,"%s",skey);
strcat(key, mess);

答案 1 :(得分:1)

您在同一缓冲区上使用sprintf两次,因此会被覆盖。

您可以像这样使用strcat

strcpy(key, skey);
strcat(key, mess);

答案 2 :(得分:1)

sprintf(key,skey);

它将skey写入key

sprintf(key,mess);

mess写入key,覆盖之前写的skey

所以你应该使用它:

sprintf(key,"%s%s", skey, mess);

答案 3 :(得分:1)

printf("Contcatened string = %s",strcat(skey,mess));

答案 4 :(得分:1)

除了缺少格式字符串外,还存在一些其他问题:

char* key;
key = malloc(100); // Don't cast return value of malloc in C
// Always check if malloc fails
if(key) {
    memset(key, '\0' , 100 * sizeof(char));
    const char * skey = "844607587"; // Use const with constant strings
    const char * mess = "hello world";
    // sprintf requires format string like printf
    // Use snprintf instead of sprintf to prevent buffer overruns
    snprintf(key, 100, "%s%s", skey, mess); 
    printf("%s", key);
    free(key);
}

修改

带有calloc的版本将替换malloc并删除memset

key = calloc(100, sizeof(char));
if(key) {
    const char * skey = "844607587";

答案 5 :(得分:0)

您的代码如下

sprintf(key,skey);
sprintf(key,mess);
printf("%s",key);

结果将是“你好世界”

您可以将代码更改为如下

sprintf(key, "%s%s", skey, key);
printf("%s",key);

结果如下“844607587hello world”

答案 6 :(得分:0)

代码如下:

strncpy(key, skey, strlen(skey));
strcat(key, mess);