【问题标题】:Is there a way to pass strings like this in C?有没有办法在 C 中传递这样的字符串?
【发布时间】:2016-09-19 08:07:58
【问题描述】:

我有一个接受字符数组(即字符串)作为参数的函数。

但是整数变量的值也应该作为字符串的一部分打印出来。

例如, 如果我有这样的功能:

int var=10;
void printStr(char str[])
{
   printf("%s", str);
}

我需要用消息打印整数变量'var'的值

"var 的值为 %d", var

我试过了

printStr( ("The value of var is %d", var) );

但是没有用。

有没有办法在不将变量作为参数传递给printStr() 的情况下完成此操作?

这种情况下的输出应该是

var的值为10

【问题讨论】:

    标签: c string function parameter-passing


    【解决方案1】:

    看来您需要函数sprintf/snprintf 来生成字符串。

    试试这样的:

    char tempStr[30];
    snprintf(tempStr, sizeof(tempStr), "The value of var is %d", var);
    printStr(tempStr);
    

    这是你需要的吗?

    【讨论】:

    • @Ilya 那很好。但是有没有办法在不创建字符串的情况下将其传递给函数?
    • @J...S 如果允许只有一个参数(一个字符串),我们需要构建一个字符串。如果您可以在此处更改某些内容(例如,如果您可以使用包含两个值的 struct:string 和 int),则无需 sprintf/snprintf
    • @J...S 不,字符串格式化是严格通过调用函数来完成的,在语言中没有运算符可以做到这一点,例如蟒蛇。
    • @J...S 有,但是你基本上是在实现 printf。
    【解决方案2】:

    也许你会发现variable number of arguments to functionsGCC format attributes 对构建你的东西​​很有用。但是,您需要将 GCC 用于属性,并且没有任何移植到其他编译器的计划。

    但是我不会搞砸这些事情,并想办法在没有这些的情况下做事。

    【讨论】:

    • 但是 GCC 格式属性相对于其他编译器是不可移植的,而且问题没有 GCC 标签,是吗?
    • @harper GCC 格式属性对于类型检查很有用,但它们并不重要。我会编辑这件事并说它仅适用于 GCC。
    猜你喜欢
    • 2015-02-06
    • 2015-11-25
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    相关资源
    最近更新 更多