这个指针返回功能有问题

时间:2011-08-07 01:49:58

标签: c

我在尝试写一个简单的函数调用时遇到了一些问题;基本上,该函数采用stringcharacter参数,并将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;

}

3 个答案:

答案 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会警告您分配