У меня есть 2D массив строк, загруженные с GetLine из STDIN Например:Cutting « 0» из строки
Hi my name is John.
I like chocolate.
Тогда я хочу искать, если введенную строку/подстроки с одним из примера строковых массивов:
Ohn. - matches at line 1
chocolate. - matches at line 2
Я использую функцию Standart strstr:
if ((strstr(array[i],string)) != NULL) {
printf("Match");
}
проблема заключается в том, что, когда я хочу найти строка, которая не находится в конце строки, как я написал, она не соответствует, потому что, вероятно, когда я хочу найти «как» в строке, она, вероятно, сравнивается как \ 0 с «как», поэтому она никогда не будет соответствовать.
Когда я загружаю строку с помощью getline в буфер, я использовал функцию: strlen (buffer) -1, тогда я выделил память для strlen (buffer) - 1 * sizeof (char), а затем скопировал ее в массив с функцией memcpy. Все работало отлично, но когда строка имеет длину в 7-8 он ставит 2 неопределенные символы в конце строки, например:
строк длиной менее 7 или более 8 символов работают отлично. Если вы знаете, как исправить эту проблему или узнать лучший способ сделать из строки \ 0 просто строка без \ 0, дайте мне знать, я буду благодарен.
Часть кода, который не работает. Только совпадения с конечными строками, как я упомянул. Поле представляет собой 2D массив строк, строка - это буфер, в котором хранится строка.
size_t len = 0;
char *line = NULL;
int number;
while ((number = getline(&line, &len, stdin)) != -1) {
for (i = 0; i < index; i++) {
if(strstr(pole[i], line) != NULL) {
printf("Match");
}
}
}
6
John.
'Hi my name is John.
' contain 'John.
'
'Testing stuff
' does not contain 'John.
'
'I do not know what to write
' does not contain 'John.
'
8
Testing
'Hi my name is John.
' does not contain 'Testing
'
'Testing stuff
' does not contain 'Testing
'
'I do not know what to write
' does not contain 'Testing
'
5
know
'Hi my name is John.
' does not contain 'know
'
'Testing stuff
' does not contain 'know
'
'I do not know what to write
' does not contain 'know
'
Строка представляет собой массив символов, заканчивающихся на \ 0. Если он не заканчивается символом \ 0, это не строка. Кроме того, strstr делает ** не ** считать \ 0. – immibis
Так можете ли вы тогда сказать мне, почему это не соответствует всей строке или подстроке? – paxie
можете ли вы отредактировать вопрос с помощью фрагмента кода, который вы написали? –