我一直在变坏指针。谁能告诉我我做错了什么?
int SearchString( char* arr[], char* key, int size )
{
int n;
for ( n = 0; n < size; ++n ) {
if ( strcmp(arr[n], key) ) {
return n;
}
}
return -1;
}
char str[][16] = { "mov","cmp","add","sub","lea","not","clr","inc","dec","jmp","bne","red","jrn","psr","rts","stop"};
if(SearchString(str,"word",16) == -1){ return FALSE;}
答案 0 :(得分:4)
无法判断word
的来源。你可能想要if (!strcmp(arr[n],key)) return n;
(相反)。数组的类型可能不是你想要的。尝试
const char *str[] = { "mov",.... };
代替。你有一个字符数组数组,并将它传递给实际需要指针数组的地方。
答案 1 :(得分:3)
将char str[][16]
更改为char *str[16]
(或仅char *str[]
)。
此外,strcmp
在字符串相等时返回零,因此您需要这样:
if ( strcmp(arr[n], key) == 0 ) {
答案 2 :(得分:1)
strcmp()
会返回零!您的测试应为if (!strcmp(...))
另外,请考虑使用strncmp()
。
答案 3 :(得分:1)
参数作为char ** ar传递,这是不正确的。
其中一个替代方案是将原型改为:
int SearchString( char arr[][16], char* key, int size )
得到预期的行为。