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组合两个字符串?
答案 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);