0 c++
int main(){
const char *a[] = {"zero","one"};
char b[] = "zero";
bool c = b==a[0];
}
Run Code Online (Sandbox Code Playgroud)
为什么是boolvaluezero因为我传递了相同的字符串以及如何将其设为1?
const char *a[] = {"zero","one"};创建两个数组,一个数组填充 \xe2\x80\x9czero\xe2\x80\x9d 的字符,后跟一个空字符,另一个数组填充 \xe2\x80\x9cone\xe2\x80\x9d 的字符,后跟空字符,并设置a[0]为指向第一个数组的第一个元素并a[1]指向第二个数组的第一个元素。
char b[] = "zero";创建一个数组并用 \xe2\x80\x9czero\xe2\x80\x9d 的字符填充它,后跟一个空字符。
b==a[0]将数组转换b为指向其第一个元素的指针,并将该指针与该指针进行比较a[0]。由于它们指向不同的数组,因此该==操作的计算结果为 false(零)。两个数组包含相同数据的事实是无关紧要的。比较的是指针,而不是数组内容。
要比较两个字符串,您可以使用std::strcmpheader 中声明的<cstring>, 。std::strcmp(b, a[0])当且仅当两个字符串相同时返回零。当且仅当两个字符串相同时bool c = std::strcmp(b, a[0]) == 0;才会设置为 true。c
(std::strcmp如果第一个字符串 \xe2\x80\x9c 小于第二个字符串 \xe2\x80\x9d,则返回负数,其中 \xe2\x80\x9c 小于 \xe2\x80\x9d 表示第一个不同的位置具有较低的值第一个字符串中的字符代码比第二个字符串中的字符代码少,将字符视为unsigned char值。如果第一个字符串大于第二个字符串,则返回正数。)