Как проверить, существует ли символ в строке, используя функцию strstr() в C

#arrays #c #string #pointers #char

Вопрос:

Это, должно быть, простая проблема с типом данных char и указателями.

 void main() {

    const char* a;
    char character = 65;
    a = amp;character;

    printf("%c n", character); // PRINTS 'A' AS EXPECTED

    if (strstr("ABC", a)) { 
        printf("found n");
    }
    else {
        printf("not foundn"); // goes into else
    }
}
 

Я не понимаю, почему это не входит в первое утверждение if.

Комментарии:

1. a это не строка. Строка в C-это последовательность символов, заканчивающаяся нулем.

2. Вы хотели использовать strchr, не так ли?

Ответ №1:

Вам нужно обнулить a строку, чтобы она была правильной строкой C, прежде чем вызывать strstr:

Любое из следующих:

 if (strstr("ABC", "A"))
{
    // found
}
 

Или

 char a[2] = {'A', ''};
if (strstr("ABC", a))
{
    // found
}
 

Или

 const char* a = "A";
if (strstr("ABC", a))
{
    // found
}
 

Комментарии:

1. или if (strstr("ABC", (char [2]){a})) .

Ответ №2:

a это не строка. Это связано с тем, что строки в C должны заканчиваться нулем. Под нулевым завершением я подразумеваю, что последний элемент должен быть равен 0. Это делается для того, чтобы, когда вы передаете строки функциям, они могли знать, когда заканчивается строка. Нулевое значение, заканчивающееся 0, используется для обозначения конца строки.

Вам нужно сделать:

 char *a;
char character[2];
character[0] = 'A'; //Don't use 65. ASCII isn't the only encoding
character[1] = '';
a = character; //a is useless, you can pass character directly
 

Теперь передайте это: strstr(«ABC», a)`. Приведенный выше метод очень плох, не используйте его. Выполните одно из этих действий на практике:

 char a[2] = "A"; //This will null terminate for you
//OR
const char *a = "A";
//OR
char a[2] = {'A', ''};
 

Использование любого из этих объявлений strstr должно сработать.