Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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++的访问中,有以下例子: int count_x(char∗ p, char x) // count the number of occurrences of x in p[] // p is assumed to point to a zero-ter minated array of char (or to nothing) { int count = 0; while (p) { if (∗p==x) ++count; ++p; } return count; }_C++ - Fatal编程技术网

这个字符数组应该是怎样的?(C++教程之旅) 在C++的访问中,有以下例子: int count_x(char∗ p, char x) // count the number of occurrences of x in p[] // p is assumed to point to a zero-ter minated array of char (or to nothing) { int count = 0; while (p) { if (∗p==x) ++count; ++p; } return count; }

这个字符数组应该是怎样的?(C++教程之旅) 在C++的访问中,有以下例子: int count_x(char∗ p, char x) // count the number of occurrences of x in p[] // p is assumed to point to a zero-ter minated array of char (or to nothing) { int count = 0; while (p) { if (∗p==x) ++count; ++p; } return count; },c++,C++,然后我测试了它,但它不工作。因为它给我带来了一个分段错误,我想我使用的数组有一个问题,就是这个: char c_arr[11] {'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd'}; 有人知道为什么会这样吗 // p is assumed to point to a zero-ter minated array of char (or to nothing) 数组不是C字符串:结尾必须有一个0值。 循环从未停止,因为它找不到0值 -编辑- 循

然后我测试了它,但它不工作。因为它给我带来了一个分段错误,我想我使用的数组有一个问题,就是这个:

 char c_arr[11] {'a', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd', 'd'};
有人知道为什么会这样吗

// p is assumed to point to a zero-ter minated array of char (or to nothing)
数组不是C字符串:结尾必须有一个0值。 循环从未停止,因为它找不到0值

-编辑- 循环执行的测试不正确:while指令读取p的地址而不是其值,因此即使数组中有0值,循环也不会停止

int count_x(char∗ p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-ter minated array of char (or to nothing)
{
    int count = 0;
    while (p) // Error here
    {
        if (∗p==x)
            ++count;
        ++p;
    }
    return count;
}
数组不是C字符串:结尾必须有一个0值。 循环从未停止,因为它找不到0值

-编辑- 循环执行的测试不正确:while指令读取p的地址而不是其值,因此即使数组中有0值,循环也不会停止

int count_x(char∗ p, char x)
// count the number of occurrences of x in p[]
// p is assumed to point to a zero-ter minated array of char (or to nothing)
{
    int count = 0;
    while (p) // Error here
    {
        if (∗p==x)
            ++count;
        ++p;
    }
    return count;
}

问题是p。它不检查p是否指向零字符,而是检查p是否为空指针。所以理论上它永远不会停止搜索,当然,它会运行到无效的内存地址,接收到SIGSEGV分段错误

不能将空指针放在字符串的末尾,因为空指针是指向地址0的指针。Null是指针本身的一个属性,与指针指向的内容无关,只与指向的位置有关

要修复,请使用while*p。然后,如果p指向\0空字符,它将在退出循环时为while提供一个falsy值


问题是p。它不检查p是否指向零字符,而是检查p是否为空指针。所以理论上它永远不会停止搜索,当然,它会运行到无效的内存地址,接收到SIGSEGV分段错误

不能将空指针放在字符串的末尾,因为空指针是指向地址0的指针。Null是指针本身的一个属性,与指针指向的内容无关,只与指向的位置有关


要修复,请使用while*p。然后,如果p指向\0空字符,它将为while提供一个falsy值,从而退出循环。

这里,我们必须按如下方式构造while循环:
而*p!='\0'

在这里,我们必须按如下方式构造while循环:

而*p!='\0'

如果您在书中发现此代码,请立即以环保的方式处置。您可能没有正确地转录它,但如图所示,此代码是垃圾代码。简短回答:whilep应改为while*p。此字符数组应封装在一个类中,该类具有构造函数、析构函数和良好的访问器,也称为std::string@IgorTandetnik这是比亚恩·斯特劳斯特普的书,代码复制不正确并导致错误。char和p之间的符号是什么:∗? 它似乎是一个unicode符号,看起来有点像正确的符号*。在彼此旁边,您将看到不同之处:∗*如果您在书中发现此代码,请立即以环保的方式处置。您可能没有正确地转录它,但如图所示,此代码是垃圾代码。简短回答:whilep应改为while*p。此字符数组应封装在一个类中,该类具有构造函数、析构函数和良好的访问器,也称为std::string@IgorTandetnik这是比亚恩·斯特劳斯特普的书,代码复制不正确并导致错误。char和p之间的符号是什么:∗? 它似乎是一个unicode符号,看起来有点像正确的符号*。在彼此旁边,您将看到不同之处:∗*循环甚至从不检查0值,所以不管是否存在。是的,我在第一个错误时停止:-我非常确定从书中复制的行被正确复制,所以我只检查了他自己的代码。while执行的测试出错,因为它测试的是地址而不是值。我假设您指的是while循环不用于指令。另一个打字错误:-循环甚至从不检查0值,所以不管是否存在。是的,我在第一个错误时停止:-我非常确定从书中复制的行被正确复制,所以我只检查了他自己的代码。while执行的测试出错,因为它测试的是地址而不是值。我假设您指的是while循环不用于指令。另一个输入错误:-接收SIGSEGV分段错误。程序不可避免地会出现故障吗?@SchwiftyMcSchwifulface这是实践中最有可能的结果。在形式上,该程序表现出未定义的行为,这意味着它可以合法地生成@SchwiftyMcSchwifulface。退出分段错误是最好的结果。更糟糕的是,违反了某些内存区域的限制,导致了未定义的行为。但这本书说它应该在数组末尾停止,因为它以一个空指针结尾,有没有办法将空指针放在数组末尾?@Jo
罗德里格斯见编辑。不要太固执。一本书可能有打字错误。更糟糕的书甚至可能有错误的内容。接收SIGSEGV分割错误。程序不可避免地会出现故障吗?@SchwiftyMcSchwifulface这是实践中最有可能的结果。在形式上,该程序表现出未定义的行为,这意味着它可以合法地生成@SchwiftyMcSchwifulface。退出分段错误是最好的结果。如果违反某些内存区域的限制,导致未定义的行为,情况可能会更糟。但这本书说它应该在数组末尾停止,因为它以空指针结尾。有没有办法将空指针放在数组末尾?@JorgeRodríguez请参见编辑。不要太固执。一本书可能有打字错误。更糟糕的书甚至可能有错误的内容。欢迎使用堆栈溢出。您的答案对已接受的答案有何补充?欢迎使用堆栈溢出。你的答案对被接受的答案有什么补充?