簡體   English   中英

C程序:Strcmp

[英]C program: Strcmp

我是C編程新手。 我正在嘗試比較兩個字符串。 我收到錯誤:此行有多個標記。 傳遞'strcmp'的參數1使指針從整數開始而無需強制轉換。 傳遞'strcmp'的參數2使指針從整數開始而無需強制轉換

char names[SIZE][LENGTH];   
char srch_name[LENGTH];

if(strcmp(names[g][LENGTH], srch_name[LENGTH]) == 1)

直接的問題是您要將一對char傳遞給strcmp ,而不是char* 這很容易解決-此調用將編譯:

strcmp(names[g], srch_name)

但是,第二個問題是,您不檢查strcmp的特定值(零除外):根據比較結果,它返回的值小於零,零或大於零的數。

  • 當第一個不匹配的字符在ptr1中的值小於ptr2值時, <0
  • 兩個字符串的內容相等時為0
  • 當第一個不匹配的字符在ptr1中的值大於在ptr2值時, >0

注意:由於C對數組0..LENGTH-1進行索引,因此按srch_name[LENGTH]實際長度解引用數組幾乎總是錯誤。 這不是錯誤的唯一情況是采用單尾元素的地址。

strcmp()的原型是

int strcmp(const char *s1, const char *s2);

但是您提供的兩個參數都是char類型,而不是char *類型。

也許你是說

if(strcmp(names[g], srch_name) == 1)

並且,如果要檢查字符串是否相等,請注意,如果兩個字符串的內容相同,則strcmp()返回0

char names[SIZE][LENGTH];

names是字符數組( char ** )的數組。

在該數組中查找項目:

names[g]

因此是一個字符數組( char * )。 在其中查找項目:

names[g][LENGTH]

為您提供一個字符( char )。 而且這超出了數組的范圍,因為數組的有效索引僅從0LENGTH - 1 strcmp需要您傳遞字符數組( char * ),而不是單個字符( char )。

解決方案:擺脫第二次查找。

(另外, strcmp的結果需要與0而不是1進行比較)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM