我正在尝试格式化和合并字符串(使用sprintf),然后使用printf打印它们。但它不起作用,我不知道为什么。 错误是字符串未初始化。
int main() {
char wochentag[] = "Freitag";
int tag = 13;
char monat[] = "Mai";
int jahr = 1927;
char *string;
char *array=(char *) malloc(26*sizeof(char));
sprintf (string,"%s" "%d" "%s" "%d",wochentag,tag,monat,jahr);
printf("%s\n", string);
free(array);
return 0;
}
答案 0 :(得分:1)
以下修复程序实现了您尝试执行的操作:
char *array=(char *) malloc(26*sizeof(char));
指向char的指针是char*
,而不是*char
。
char *array=(char *) malloc(26*sizeof(char));
sprintf (array,"%s %d %s",wochentag,tag,monat);
printf("%s\n", array);
由于您为array
变量分配内存,这应该是sprintf
和printf
中应该使用的内容,对吧?另请注意,sprintf
的正确使用是带引号。
这是固定代码:
int main() {
char wochentag[] = "Freitag";
int tag = 13;
char monat[] = "Mai";
int jahr = 1927;
char *string;
char *array=(char *) malloc(26*sizeof(char));
sprintf (array,"%s %d %s",wochentag,tag,monat);
printf("%s\n", array);
free(array);
return 0;
}
答案 1 :(得分:0)
以下代码干净利落地编译,删除代码混乱,执行错误检查,包含所需的头文件,适当缩进以提高可读性并正常工作。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char wochentag[] = "Freitag";
int tag = 13;
char monat[] = "Mai";
int jahr = 1927;
char *string=malloc(26);
if( NULL == string)
{ // then malloc failed
perror( "malloc for 26 bytes failed");
exit( EXIT_FAILURE);
}
// implied else, malloc successful
sprintf (string,"%s%d%s%d",wochentag,tag,monat,jahr);
printf("%s\n", string);
free(string);
return 0;
}