gpt4 book ai didi

C如何在其他变量中引用变量

转载 作者:行者123 更新时间:2023-11-30 16:30:43 24 4
gpt4 key购买 nike

我对 C 相当陌生,我无法弄清楚如何在其他变量中引用变量。

int main () {

const char *TOKEN;
char *cmd;

TOKEN = "some auth token";
cmd = "some_cmd --auth-token=%s", TOKEN;
printf(cmd)
}

这显然行不通。如何将 TOKEN 的值分配给另一个变量 cmd

最佳答案

请注意,C 源文件中有两种指令。在实际编译之前执行的宏或其他预处理器指令以及在预处理之后编译的真正的 C 表达式。

C 是一种相当低级的语言,因此变量有一个类型,并且只能包含该类型的值:这里 cmd 是一个指向 char 的指针,并且只能包含...一个指针转换为 char(唯一的魔力是标准库的许多函数将空终止的 char 数组解释为字符串。

所以在这一行中:

cmd = "some_cmd --auth-token=%s", TOKEN;

编译器看到一些变量(cmdTOKEN),一个字符串垃圾(“some_cmd --auth-token=%s” ) 一个赋值运算符 (=) 和一个逗号运算符 (,)。首先评估逗号运算符的参数:"some_cmd --auth-token=%s" 衰减为指向其第一个字符的指针,TOKEN 评估为其值(它只是一个指针)然后执行逗号运算符,表达式的值变成逗号右侧成员的值,这里是TOKEN。最后,执行赋值cmd = TOKEN;。所以它工作完美,但是按照您的要求执行,但它可能不是您想要的,因为在下一行中您尝试打印未初始化的字符指针...

你必须采取可能的方法:

  1. 宏:

    int main () {

    const char *TOKEN;

    TOKEN = "some auth token";
    #define CMD "some_cmd --auth-token=%s", TOKEN
    printf(CMD);
    }

    预处理将其更改为:

    int main () {

    const char *TOKEN;

    TOKEN = "some auth token";
    printf("some_cmd --auth-token=%s", TOKEN);
    }

    这将给出预期的结果

  2. sprintf 函数:

    int main () {

    const char *TOKEN;
    char *cmd;

    TOKEN = "some auth token";
    cmd = malloc(strlen(TOKEN) + sizeof("some_cmd --auth-token=%s") + 1;
    sprintf(cmd, "some_cmd --auth-token=%s", TOKEN);
    printf(cmd);
    free(cmd);
    }

关于C如何在其他变量中引用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com