[英]comparing and defining strings in C
我查看了其他答案,但找不到答案。
我想將字符串的最后一個字符與文字“%”進行比較。
strcpy(ch, fName[strlen(fName) - 1]);
printf("%d\n", strcmp(ch, "%"));
我想用cl命令行編譯器(MicroSoft)進行編譯,並得到警告:
cbx_test1.c(43) : warning C4047: 'function' : 'const char *' differs in levels of indirection from 'char'
cbx_test1.c(43) : warning C4024: 'strcpy' : different types for formal and actual parameter 2
我的代碼有問題,這很明顯。 但是呢
您遇到的問題是, fName[strlen(fName) - 1]
屬於char
類型,而不是strcpy()
需要的const char *
類型。 另外,我們不知道這里使用的ch
的類型。
考慮fName
是char
類型的數組,您想要的是
if ('%' == fName[strlen(fName)-1])
//do something
首先,您需要考慮c中的字符串是非nul
字節的序列,然后是nul
字節的序列,您嘗試使用strcpy()
復制一個字符,該字符用於復制string ,因此這就是編譯器抱怨的原因。
您可以通過簡單的分配來做到這一點,即
char ch;
size_t length;
length = strlen(fname);
ch = fname[length - 1];
然后可以像這樣將ch
與'%'
字符常量進行比較
printf("%d\n", (ch == '%'));
請注意單引號 ,盡管不是必需的,但您想要執行的操作是可能的,像這樣
char ch[2];
size_t length;
length = strlen(fname);
strcpy(ch, &fname[length - 1]);
printf("%d\n", strcmp(ch, "%"));
請注意,為"%"
分配了兩個字符以使其成為字符串,因為它需要終止的nul
字節,例如%\\0
,當您使用"%"
類的字符串文字時,您無需顯式指定它,因為這意味着。
您也可以使用memcmp()
,在這種情況下也不是必須的,但我認為有意思的是strcmp()
並不是比較c中兩個字符串的唯一方法,您可以1
char ch[1];
size_t length;
length = strlen(fname);
ch[0] = fname[length - 1];
printf("%d\n", memcmp(ch, fname + length - 1, 1));
請注意,在這種情況下,不需要終止符'\\0'
因為我們指示memcmpt()
僅比較1個字節。
1 請注意, fname + length - 1
等效於&fname[length - 1]
如果fName[]
是字符數組,則您的代碼
strcpy(ch, fName[strlen(fName) - 1]);
這是錯誤的,因為strcpy()
希望將字符數組(或換句話說, const char *
)作為參數而不是單個字符。
如果只想檢查一個字符,那么if語句就足夠了,例如
if ( fName[strlen(fName) - 1] == '%' )
問題出在兩行。
strcpy(ch, fName[strlen(fName) - 1]);
strcpy
希望兩個參數都為char *
。 但是,兩種論點都不是字符*。 將此語句替換為
ch = fName[strlen(fName) - 1];
printf("%d\\n", strcmp(ch, "%"));
我認為在這一行中,您希望看到strcmp的結果為0
,這證明ch等於'%'
。 以下應該為您工作
if(fName[strlen(fName) - 1] == '%')
//do something
或將代碼用於第一條語句
if (ch == '%')
//Do something
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.