我嘗試用strcmp()
寫簡單的C
函數。但我總是得到Segmentation fault (core dumped)
。哪裏不對 ?這個strcmp()有什麼問題?
char *arr={"abcdefg"};
char *a = arr[1];
if(strcmp(a, 'b') == 0)
{
printf("it is b \n");
}
我嘗試用strcmp()
寫簡單的C
函數。但我總是得到Segmentation fault (core dumped)
。哪裏不對 ?這個strcmp()有什麼問題?
char *arr={"abcdefg"};
char *a = arr[1];
if(strcmp(a, 'b') == 0)
{
printf("it is b \n");
}
有什麼不對?
你沒有讓自己得到編譯器的幫助。
使用海合會-Wall -Wextra
(這絕不是你可以得到最好的,而是你應該總是使用最低限度的),我得到:
testme.c: In function ‘main’:
testme.c:6:11: warning: initialization makes pointer from integer without a cast [enabled by default]
char *a = arr[1];
^
你把arr[1]
- 這是char
值'b'
- 和將它變成char *
。您的a
現在指向地址爲0x62
(假設爲ASCII)的任何地址,這絕對不是您想要的。你可能想要&arr[1]
或arr + 1
。
或者你想一個char
- 那麼你不應該申報char *
,並strcmp()
將首先使用錯誤的事情。
testme.c:8:1: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
if(strcmp(a, 'b') == 0)
^
In file included from testme.c:1:0:
/usr/include/string.h:144:12: note: expected ‘const char *’ but argument is of type ‘int’
extern int strcmp (const char *__s1, const char *__s2)
^
strcmp()
需要兩個C字符串(char const *
)。您的第二個參數'b'
的類型爲int
...您可能需要"b"
。
仍然不是比較平等的,因爲"bcdefg"
不等於"b"
...
或者你想一個字符的比較......這將是if (a == 'b')
然後,用a
存在char
類型,不是char *
(見上文)。
testme.c:10:5: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]
printf("it is b \n");
^
testme.c:10:5: warning: incompatible implicit declaration of built-in function ‘printf’ [enabled by default]
請做我們發佈完整代碼的所有的青睞,包括int main()
和所有的,所以我們可以複製粘貼& &編譯,仍然有行號的比賽。
我覺得這是你一直在努力實現的目標:
#include <stdio.h>
#include <string.h>
int main(void)
{
char *arr = {"abcdefg"};
char a = arr[1];
if(a == 'b')
{
printf("it is b \n");
}
}
你在這裏做了很多錯誤的事情。 strcmp
用於比較字符串。做你想做的最簡單的方法是
char *arr= {"abcdefg"};
char a = arr[1];
if(a == 'b')
{
printf("it is b \n");
}
如果你仍然想strcmp
做到這一點,你需要通過追加空終止\0
它使a
的字符串。
char *arr= {"abcdefg"};
char a[] = {arr[1], '\0'};
if(strcmp(a, "b") == 0)
{
printf("it is b \n");
}
''b''屬於'char'類型。它應該是''「b」'。 –
''b''是一個字符。 'strcmp'需要一個字符串(所以'char *')。 – hexasoft
「a」並不指向您認爲它指向的位置。如果編譯器在您製作此代碼時不發出警告,則需要啓用更多警告。 –