【问题标题】:Using arrays in C to print specific values在 C 中使用数组打印特定值
【发布时间】:2013-11-30 19:53:50
【问题描述】:

我真的是 C 语言的新手。需要一些有关如何使用 Array 打印出特定值的帮助,如下所述。

这是我的数组声明:

这里guestArray获取tid的所有值

long guestArray[10]= {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int l = 0;
void *guest(void *threadid)
{
    long tid ;
    tid = (long)threadid;
    guestArray[l]= tid;
    l++;
}

tid 的值介于 1-10

但是当我在其他函数中使用数组时,它会打印除tid 以外的值

void *checkOut()
{
int j; 
for (j = 0 ;j<10;j++)
{
printf("Guest %d \n" , guestArray[j]);
}

【问题讨论】:

  • 这就是你的全部吗?尤其是您的第一个片段:它不是循环的一部分,您正在仅填充元素#0?
  • 糟糕,我忘了添加完整代码

标签: c arrays pthreads


【解决方案1】:

您的函数guest 似乎不知道l,它正在将tid 分配给任何地方。这会调用未定义的行为,您将得到任何结果,无论是预期的还是意外的结果。

另一个问题是您的函数的返回类型是void *,但您没有从中返回任何内容。您的编译器应该对此发出警告。


编辑:根据 OP 给出的link
您使用了错误的说明符 %d 来打印 tid 的值。 %d 用于 int 类型,但 tidlong int 类型。使用错误的说明符会调用未定义的行为,您将得到任何结果,无论是预期的还是意外的结果。将%ld 用于lon 类型。

7.21.6 格式化输入/输出函数:

如果转换规范无效,则行为未定义。282) 如果任何参数不是相应转换规范的正确类型,则行为是 未定义。

【讨论】:

  • codepad.org/Eo7KTFY9 如果您想看一下,这是完整的代码。
  • 谢谢你,非常感谢你的帮助。但我现在真的很困惑,无论我做出什么改变,我仍然得到相同的输出。我正在使用腻子,虽然我知道它很糟糕,但我可以得到你的电子邮件或其他东西来向你展示我的输出
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
  • 2022-09-30
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多