Форум программистов, компьютерный форум CyberForum.ru

Почему функция strchr по разному работает при разных строках? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.78
Stoun
0 / 0 / 0
Регистрация: 21.03.2007
Сообщений: 6
21.03.2007, 12:00     Почему функция strchr по разному работает при разных строках? #1
Только начал изучать С. Пользую Borland C++ v.3.1
Нужно работать со строками. Вот стандартный пример из стандартного хелпа компилятора:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string.h>
 #include <stdio.h>
 
int main(void)
 {
    char string[25];
    char *ptr, c = 'n';
 
  strcpy(string, "This is a string");
    ptr = strchr(string, c);
    if (ptr)
       printf("The character %c is at position: %d\n", c, ptr-string);
    else
       printf("The character was not found\n");
    return 0;
 }
Этот пример работает на ура. Ищет любой символ в любом месте.

Но, если я меняю строку поиска на такую: "N034 G03 X-34.25 Y45.86 R34.5" и пытаюсь найти любой символ (из присутствующих в строке) то получаю результат:

The character is at position 26

При изменении строки результат тоже разный.....
Где глючит?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2007, 12:00     Почему функция strchr по разному работает при разных строках?
Посмотрите здесь:

C++ Функция strchr (Язык Си) -не выполняет=(
C++ функция strchr
Почему-то на работает функция!( C++
Почему не работает функция? C++
Функция strchr C++
Почему не работает функция? C++
Как сделать, чтобы в окне программы при запуске переменные стояли на разных строках? C++
C++ В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной
почему не работает функция? C++
Почему в разных учебниках главная функция называется по разному? C++
Функция strncpy не работает на строках длинее трех символов C++
C++ Не работает функция подсчета количества знаков в трёх вводимых строках

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ensase
Флудер
 Аватар для Ensase
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
23.03.2007, 16:33     Почему функция strchr по разному работает при разных строках? #2
повнимательней с длиной string, у меня все работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
main()
 {
    char string[30];
    char *ptr, c = 'Y';
 
  strcpy(string, "N034 G03 X-34.25 Y45.86 R34.5");
    ptr = strchr(string, c);
    if (ptr)
       printf("The character %c is at position: %d\n", c, ptr-string);
    else
       printf("The character was not found\n");
       getch();
    return 0;
  }
Выдает 17 позицию!
Stoun
0 / 0 / 0
Регистрация: 21.03.2007
Сообщений: 6
26.03.2007, 11:18  [ТС]     Почему функция strchr по разному работает при разных строках? #3
Ага, понял. Если строка длиннее чем определена, то начинаются глюки.
Тогда второй вопрос. Разве компилер сам не обрезает строки? Просто тупо пишет в память все что ему подсовывают? И при этом затирает содержимое следующих ячеек. Это так надо или можно как-то автоматизировать? Я же не знаю какой длины будет следующая строка.... Или сразу определять их с N-кратным запасом?
Ensase
Флудер
 Аватар для Ensase
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
26.03.2007, 16:00     Почему функция strchr по разному работает при разных строках? #4
Конечно компилятор так и поступает! Это ведь строки терминированные нулем! Массивы по сути. Можно пихать нуль а можно нет - вот когда ты пихаешь строку большего размера, у нее нет в конце нуля т.к. места и так не хватает, то нуль не поместился. А если хочешь автоматики - используй стандартный класс string
Yandex
Объявления
26.03.2007, 16:00     Почему функция strchr по разному работает при разных строках?
Ответ Создать тему
Опции темы

Текущее время: 19:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru