【问题标题】:How to format and merge strings如何格式化和合并字符串
【发布时间】:2015-10-24 15:29:18
【问题描述】:

我正在尝试格式化和合并字符串(使用 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) 不是有效的演员表。
  • @Fabian - array 已分配但从未使用过。 string 已使用但从未分配。你看到问题了吗?
  • 好的,谢谢大家,我终于明白了!
  • 你不应该强制转换malloc的返回值:stackoverflow.com/q/605845/1025391

标签: c arrays string printf


【解决方案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;
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-10-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多