如何格式化和合并字符串

How to format and merge strings

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

以下修复可实现您的目标:

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;
}

以下代码可以干净地编译,消除代码混乱,执行错误检查,包括所需的头文件,适当缩进以提高可读性并且可以正常工作。

#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;
}