【问题标题】:An IF Statement Is Changing An Array Element In A FunctionIF 语句正在更改函数中的数组元素
【发布时间】:2016-12-02 02:52:40
【问题描述】:

当我的程序运行时,IF (ch[0] == 'P') 实际上将值 'P' 放入 ch[0]。有什么想法吗?输出为:“Array is Pyz”

char *try1(char ch[]);

int main()
{
  char ch[] = { 'x','y','z' }, *ch1;
  ch1=try1(ch); 
  printf("\nArray is %s\n",ch1);
  return 0;
}

char *try1 (char ch[])
{
  if (ch[0]=='P')
  {
    ch[1]='Q';
  }

  return ch;
}

【问题讨论】:

  • 你确定你有==而不是=吗?
  • 谢谢 BJ 迈尔斯。你说的对。抱歉,我在发布此内容之前尝试过非常小心,但我错过了。我以后会更彻底的。
  • 您应该查看proper C formatting。或了解如何thoroughly obfuscate your code
  • 始终将文字放在等式表达式左侧的一个强有力的案例,这样编译器就可以捕捉到问题,而不必花费时间和精力调试程序。
  • 数组 ch[] 不是 NUL 终止的,因此对 printf() 的调用将导致在数组中实际 3 个字节之后输出垃圾,直到遇到 NUL 字节。这是未定义的行为,可能导致段错误事件。

标签: c arrays function if-statement


【解决方案1】:

如果你想把 ch 解释为一个字符串,你应该用 '/0' 结束数组。替换

char ch[] = { 'x','y','z'}

char ch[] = { 'x','y','z', '\0' }

输出变为“Array is xyz”。

欲了解更多信息,请阅读https://en.wikipedia.org/wiki/Null-terminated_string

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多