如何格式化和合并字符串

时间:2015-10-24 15:29:18

标签: c arrays string printf

我正在尝试格式化和合并字符串(使用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;
}

2 个答案:

答案 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变量分配内存,这应该是sprintfprintf中应该使用的内容,对吧?另请注意,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;
}