Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:变量突然变化(为什么会发生这种情况?)_C_Variable Assignment - Fatal编程技术网

C:变量突然变化(为什么会发生这种情况?)

C:变量突然变化(为什么会发生这种情况?),c,variable-assignment,C,Variable Assignment,当我在玩一个在线站点提供的一些代码时,我遇到了一个意想不到的奇怪问题:一个变量在没有任何手动赋值的情况下突然改变了它的值 代码如下: int rc = fwrite(conn->db, sizeof(struct Database), 1, conn->file); printf("rc is equal to %d\n", rc); // should print out 1 if (rc != 1) die("Failed to write Database."); rc =

当我在玩一个在线站点提供的一些代码时,我遇到了一个意想不到的奇怪问题:一个变量在没有任何手动赋值的情况下突然改变了它的值

代码如下:

int rc = fwrite(conn->db, sizeof(struct Database), 1, conn->file);
printf("rc is equal to %d\n", rc); // should print out 1
if (rc != 1) die("Failed to write Database.");

rc = fflush(conn->file);
printf("rc is equal to %d\n", rc); // should print out 0
if (rc == -1); die("Cannot flush database"); // error handling
// error comes up because rc suddenly changes to -1
我不明白它是如何发生的,但我想知道为什么一个变量在C中突然改变,而它本不应该改变

代码来源: 数据库写入下的堆堆栈和内存


顺便说一句,我正在MacOSX10.6SnowLeopard上的终端中使用vim。

它没有变为-1。仍然是零。 你有一个分号;在你的代码中,你不应该有它。 你应该:

if (rc == -1) die("Cannot flush database");

它不会变为-1。仍然是零。 你有一个分号;在你的代码中,你不应该有它。 你应该:

if (rc == -1) die("Cannot flush database");
rc的值没有改变,而是if语句有问题:

if (rc == -1); die("Cannot flush database");
             ^
第二个if语句没有与之关联的操作。除非;如果删除,则无论rc的值如何,都将始终执行模具。也就是说,改用这个:

if (rc == -1) die("Cannot flush database");
             ^
rc的值没有改变,而是if语句有问题:

if (rc == -1); die("Cannot flush database");
             ^
第二个if语句没有与之关联的操作。除非;如果删除,则无论rc的值如何,都将始终执行模具。也就是说,改用这个:

if (rc == -1) die("Cannot flush database");
             ^
你有一个小错误

 if (rc == -1);
              ^
              ^
以便始终执行die语句。条件的值已检查且从未使用

您有一个小错误

 if (rc == -1);
              ^
              ^
以便始终执行die语句。条件的值已检查且从未使用

以下是错误:

if (rc == -1); die("Cannot flush database"); // error handling
因为你的爱;在if之后,die不在if的范围内。如果您不是在编写结构化代码,这种错误很可能也很常见。这应该是:

if (rc == -1)
{
    die("Cannot flush database"); // error handling
}
如果你有一个;在输入if之后,您将立即看到它。

下面是错误:

if (rc == -1); die("Cannot flush database"); // error handling
因为你的爱;在if之后,die不在if的范围内。如果您不是在编写结构化代码,这种错误很可能也很常见。这应该是:

if (rc == -1)
{
    die("Cannot flush database"); // error handling
}

如果你有一个;在输入if之后,您将立即看到。

如前所述,分号是您的问题


你在这里所做的,虽然不是你想要的,却是完全合法的——它被称为空语句。这是写为分号,没有其他。if语句(如果为true)实际上是在执行一条语句——只是一条空语句。

正如前面所述,分号是您的问题


你在这里所做的,虽然不是你想要的,却是完全合法的——它被称为空语句。这是写为分号,没有其他。if语句(如果为true)实际上是在执行一条语句——只是一条空语句。

注意:如果使用-Wall-Wextra编译,GCC将准确地告诉您错误所在。默认情况下,叮当声会告诉你。低垂的果实会吸引你。。。也许我们可以得到另外十几个关于额外分号的答案。注意:如果您使用-Wall-Wextra编译,GCC将告诉您错误的确切位置。默认情况下,叮当声会告诉你。低垂的果实会吸引你。。。也许我们可以得到另外十几个关于额外分号的答案。@JBRPG:我的头发掉了一半是因为我自己的这些打字错误@JBRPG:由于我自己的这些打字错误,我掉了一半头发;