Возникли проблемы с этой функцией возврата указателя - PullRequest
0 голосов
/ 07 августа 2011

У меня проблемы с простым вызовом функции, который я пытаюсь написать; в основном, функция принимает аргументы 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;

}

Ответы [ 3 ]

9 голосов
/ 07 августа 2011

Это if (*string = x) должно быть if (*string == x)

Вы назначили x на *string вместо их сравнения.

3 голосов
/ 07 августа 2011

Должно быть:

if (*string == x)
2 голосов
/ 07 августа 2011

Вы сделали if (*string = x), который назначит символ (значение) x в местоположение, указанное string, и если x не равно 0, то это if будет всегда истинным.Вы хотели сравнить значение x и первый символ string, что делается с помощью if (*string == x).Это позволит сравнить значения.

Чтобы избежать таких ошибок / опечаток, в таких случаях вы можете определить char * как константу, чтобы запретить случайное изменение значений, которые вы не хотите изменять.Например, в этом случае вы можете определить свою функцию следующим образом:

char * strsrch(const char * string, char x);

Это помешает вам присвоить значение x в строку во время компиляции.

Также вы можете использовать более высокий уровень предупреждения с вашим компилятором.Например, при включении gcc -Wall вы получите предупреждение о назначении .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...