【问题标题】:String to Struct variables in C , without pointer,define字符串到 C 中的结构变量,没有指针,定义
【发布时间】:2017-02-20 03:45:51
【问题描述】:

我想要一种将字符串转换为结构变量的方法。

例如)

struct DAT
{
    int a,b;
    char c,d;
    float e,f;
}DAT1,DAT2,Main_data;

main()
{
    Test_function(1)
}

Test_function(int num)
{
    Main_data = DAT(num)   // If num is 1, Main_data = DAT1
}

我想要这个程序。 但我不能使用定义和指针。 这意味着我不使用 *# 运算符。

我该怎么做?

【问题讨论】:

  • 请您以简单明了的方式举例说明您真正想要实现的目标
  • struct DAT dat_array[2]; Main_data = dat_array[num-1];
  • if ( num == 1 ) Main_data = DAT1; else Main_Data = DAT2;
  • 请注意,现代 C(意思是“自 1990 年左右编写的 C”)应该为每个函数都有一个明确的返回类型 — int main(void)void Test_function(int num) 等。是的,编译器仍然允许马虎旧的表示法——但这并不能使它成为良好的风格,C99 和 C11 明确禁止“隐式 int 返回类型”。
  • struct 类型变量可以添加更多。但我不知道它是如何上升的。我该怎么做?...而且,类型错误是我的失误。对不起。

标签: c string variables


【解决方案1】:

您不能在运行时使用变量名称“计算”——程序中的名称实际上只存在于编译时,一旦您的程序被编译,它们就不再可用。因此,如果您希望它在运行时在不同变量之间做出决定,则需要测试该值并枚举程序中的所有可能性。比如:

void Test_function(int num)
{
    switch(num) {
    case 1:
        Main_data = DAT1;
        break;
    case 2:
        Main_data = DAT2;
        break;
    default:
        fprintf(stderr, "Invalid num %d for DAT\n", num);
    }
}

虽然这可行,但它冗长且容易出错,这就是存在数组和指针的原因——它们让它变得更容易:

struct DAT DAT[3], Main_data;

void Test_function(int num)
{
    Main_data = DAT[num];  // Undefined behavior if num is out of range!
}

【讨论】:

  • 谢谢!但是 struct 类型变量可以添加更多。但我不知道它是如何上升的。在这种情况下,我该怎么做?...
猜你喜欢
  • 2016-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 2010-10-05
  • 2021-04-02
  • 2020-03-23
  • 2015-04-10
  • 1970-01-01
相关资源
最近更新 更多