首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何声明临时字符串以便在C中重用?

如何声明临时字符串以便在C中重用?
EN

Stack Overflow用户
提问于 2015-04-09 06:43:16
回答 4查看 2K关注 0票数 3

我有一个while循环,它接受用户输入,直到用户说退出,但我不确定如何正确地声明字符串。如果用户只输入一个单词,则第二个变量将保持与前一个循环相同的值。

代码语言:javascript
运行
复制
int main(int argc, char * argv[]){
    char user_input[25];
    char var1[25], var2[25];
    while(strcmp(var1, "quit") != 0){
        clear_buffer(user_input);
        fgets(user_input, 30, stdin);
        sscanf(user_input, "%s %s", var1, var2);
        do_stuff(var1, var2);
    }
    printf("%s", "Done\n");
EN

回答 4

Stack Overflow用户

发布于 2015-04-09 07:52:28

我不确定如何正确地声明字符串

字符串不是一种类型。它们是一种值模式,与其他值一样,我们不声明它们;而是赋值(在本例中,使用strcpy和其他函数)。如果你说一个int存储的是10的倍数,那么它以0结束...如果您说一个char数组存储了一个字符串,那么它将在第一个'\0'结束。你看到模式了吗?我们可以在不同类型的整数变量中存储十的倍数,同样,对于字符串,我们可以选择不同类型的字符数组。类似地,对于在integer变量中存储数值,当声明一个数组来存储字符串时,您需要确保该数组有足够的空间来存储字符串的所有字符以及末尾的'\0'

如果用户只输入一个单词,则第二个变量将保持与前一个循环相同的值。

检查sscanf的返回值。

例如,在考虑int x = sscanf(user_input, "%s %s", var1, var2);时,您可能希望确保给sscanf的两个参数都被赋值,在这种情况下,您将检查该x == 2。如果你只关心第一个参数的赋值,那么当x == 1时你也会很高兴。但是,如果为x <= 0,则不能信任var1var2

票数 5
EN

Stack Overflow用户

发布于 2015-04-09 06:44:43

多个问题

  1. 你永远不会初始化var1,但你使用的是strcmp(),你需要在尝试使用strcmp()之前初始化var1,如果你想初始化为一个空字符串

var1 =‘\0’;

  • 您将30传递给fgets(),但user_input只能保存25字符。

现在来看看为什么程序是这样运行的,你需要检查sscanf()是否读取了两个字符串,如果没有,它不会改变传递的参数。

scanf()函数返回与输入匹配的说明符的数量,因此如果

  1. scanf()返回initialized/modified.
  2. scanf(),这意味着两个参数都不是initialized/modified.
  3. When返回,其中一个参数是0 1都已初始化/修改,然后它将返回2,因此检查这一点可以让您知道出了什么问题,并且您可以打印输入字符串以验证scanf()是否正确,输入是否错误。
票数 2
EN

Stack Overflow用户

发布于 2015-04-09 06:59:36

代码语言:javascript
运行
复制
char user_input[50+1];
char var1[25], var2[25];

while(fgets(user_input, sizeof(user_input), stdin)){
    int state = sscanf(user_input, "%24s %24s", var1, var2);
    if(state == 1 && strcmp(var1, "quit") == 0)
        break;
    else if(state == 2)
        do_stuff(var1, var2);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29526612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档