我在尝试写一个简单的函数调用时遇到了一些问题;基本上,该函数采用string
和character
参数,并将pointer
返回给字符串中该字符的first instance
。此实例中的调用使用for循环来使用指向字符串的指针来打印出4个字符串。我试图摆弄一堆东西,但无法获得该功能并致电上班。任何帮助将不胜感激。
#include <stdio.h>
#define NUMBER 4
char * strsrch(char * string, char x);
int main(void)
{
char * ptr[NUMBER];
int x;
char * word[NUMBER] = {"This is string 1", "Now string 2", "Proceeding through string 3", "And then, the last string"};
for(x = 0; x < NUMBER; x++)
puts(word[x]);
for(x = 0; x < NUMBER; x++)
puts(strsrch(word[x], 'i'));
return 0;
}
char * strsrch(char * string, char x)
{
while (*string && (*string != x))
string++;
if (*string = x)
return string;
else
return NULL;
}
答案 0 :(得分:9)
此if (*string = x)
应为if (*string == x)
您已将x
分配给*string
,而非比较它们。
答案 1 :(得分:3)
应该是:
if (*string == x)
答案 2 :(得分:2)
您已完成if (*string = x)
,会将x
的字符(值)分配到string
指向的位置,如果x
不是0
然后这个if
将永远为真。您想要比较x
的值和由string
完成的if (*string == x)
的第一个字符。这将比较值。
为避免此类错误/拼写错误,在这种情况下,您可以将char *
定义为常量,以禁止意外修改您不想更改的值。例如,在这种情况下,您可以定义您的函数,如:
char * strsrch(const char * string, char x);
这将阻止您在编译时将x
的值分配给字符串。
此外,您可以在编译器中使用更多警告级别。例如,gcc
启用-Wall
会警告您分配。