當我明確聲明一個字符串的值,然後將其與自身進行比較時,系統返回FALSE。這是否與系統添加的額外'\ 0'字符有關?我應該如何優化我的代碼才能使其成爲TRUE?C字符串長度
char name[5] = "hello";
if(name == "hello")
{
...
}
當我明確聲明一個字符串的值,然後將其與自身進行比較時,系統返回FALSE。這是否與系統添加的額外'\ 0'字符有關?我應該如何優化我的代碼才能使其成爲TRUE?C字符串長度
char name[5] = "hello";
if(name == "hello")
{
...
}
你不能(有效)比較使用!=
或==
字符串,你需要使用strcmp
這樣做的原因是因爲!=
和==
只會比較這些字符串的基址。字符串的不是內容。 不使用預定義的數組大小像char name[5] = "hello";
而不是你可以使用char name[] = "hello";
或char name[6] = "hello";
當使用
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "hello";
char b[] = "hello";
if (strcmp(a,b) == 0)
printf("strings are equal.\n");
else
printf("strings are not equal.\n");
return 0;
}
實際上,name是一個指向字符串「hello」地址的指針。你無法比較它們。所以你可以嘗試使用strcmp
函數。還包括string.h
庫。
喜歡:
strcmp(name,"hello");
也作爲註釋中的一個所指出的,採取的6字符數組包括「\0
」。
希望有所幫助。
_你不能比較他們 - 你可以! –
我的意思是比較地址和字符串是沒有意義的比較。 –
如果兩個參數相等,則strcmp()返回0。
char name[]="hello";
if(strcmp(name,"hello") == 0)
return TRUE;
else
return FALSE;
將'OP'定義的'name'傳遞給'strcmp()'會調用未定義的行爲,因爲'name' * * not *'0'-terminated。 – alk
爲變量「名稱」添加了適當的定義 –
從我的評論繼續,你需要char name[6] = "hello";
持有'hello
(加上NUL終止字符)更妙的是,你可以使用
char name[] = "hello";
這將正確初始化name
含有6-字符(包括空字節)。
所有string.h
功能期待空終止字符串作爲參數時,他們採取char *
或const char *
作爲傳遞給函數的參數。
最後,正如Anuvansh的回答中指出的那樣,您不能使用不等式條件來確定兩個字符串是否相等或不同。您或者使用正常的比較函數strcmp
,strncmp
,memcmp
,或者您在每個字符串中停留在字符串不同的第一個字符處,或者在空字節處漫遊,如果這些字符串是相同的。
看看,讓我知道你是否還有其他問題。祝你好運,你的編碼。
在C中,數組名稱實際上是指向該數組的第一個元素的指針。
if(name == "hello")
你比較字符串指針所以它會返回false
你可以看到相同的概念本文 why is array name a pointer to the first element of the array?
你可以簡單地包括「在:
你的情況串。H」庫和使用的strcmp()函數
這樣的代碼:
char name[]="hello";
if(strcmp(name,"hello")==0){
.....
}
,使其真實姿態
將您的代碼縮進4個字符以將其格式化爲代碼。 –
「*您可以簡單包含庫*」在編譯期間不使用C庫,而是在*編譯後鏈接*。 *包括*用於編譯*是由庫提供的函數的* prototype/s *。 – alk
在C你不能比較這樣的字符串,你在做什麼是比較兩個*指針*永遠不會相等。閱讀['strcmp'](http://en.cppreference.com/w/c/string/byte/strcmp)瞭解如何比較字符串。另外,請記住,字符串需要*終止*。包含5個字符的字符串需要包含終止符的*六個*字符的空間。這兩個事實應該在任何[良好的初學者書](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)。 –
如果你打算使用'name'作爲*字符串*,你需要'char name [6] =「hello」;''來保存''hello'(甚至更好'char name [] =「hello」;' 。爲什麼? (提示:你忘了'* 1'爲* nul-terminating *字符':)'如果你不打算使用'name'作爲*字符串,那麼你知道你不能使用任何'string.h'函數期望以* nul結尾的字符串*作爲參數。 –
@ DavidC.Rankin我嘗試過'char name1 [] =「hello」;'然後'char name2 [] =「hello」;'最後'strcmp(name1,name2)'但仍然是FALSE。怎麼可以這麼簡單是如此令人沮喪... – reiallenramos