2013-10-08 21 views
0
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结合两个字符串?为什么我不能将两个字符串组合在一起?

+1

您自动覆盖的最后一个值'sprintf的(键,乱七八糟);' –

+1

尽管意大利面条,有可能(有时是必要的)使用'键+的strlen(SKEY) '作为第二个'sprintf'的目的地。请注意,如果你不知道自己在做什么,我说你*可以**,**不**,应该**,**。 – Jite

+0

也更好用'snprintf' –

回答

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

分别为它们添加:

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

怎么样一个接一个,不能同时梳理 –

+0

不幸的是不是sprintf ..因为它会覆盖。 – sukhvir

+1

@SongZhibo因为你用键值 –

1

您正在使用sprintf两次在同一个缓冲,所以它被覆盖。

您可以使用strcat这样的:

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

sprintf(key,skey);

它写入skeykey

sprintf(key,mess); 

它写入messkey,覆盖先前写skey

所以,你应该这样做:

sprintf(key,"%s%s", skey, mess); 
1
printf("Contcatened string = %s",strcat(skey,mess)); 
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"; 
+0

同样使用'calloc'来获得已经归零的内存 – mvp

+0

@mvp真,如果可用,最好使用'calloc'。 – user694733

0

你的代码如下

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

结果将是 “世界你好”

您可以更改代码如下

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

结果作为遵循“844607587hello world”

0

代码如下:

strncpy(key, skey, strlen(skey)); 
strcat(key, mess); 
相关问题