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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.78
Stoun
0 / 0 / 0
Регистрация: 21.03.2007
Сообщений: 6
#1

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

21.03.2007, 12:00. Просмотров 6887. Ответов 3
Метки нет (Все метки)

Только начал изучать С. Пользую 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

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

Почему в разных учебниках главная функция называется по разному? - C++
Например, иногда (без объяснения) в учебнике говорится, что, цитирую, &quot;в любой программе на C++ главная функция должна называться...

Программа работает по-разному на разных компах - C++
Дали задание на написание небольшой программы в С++, работа с массивами. На домашнем компе работает правильно, всё выполняется. ...

функция strchr - C++
мне надо написать аналог функции strchr. т.к. по заданию нельзя использовать &lt;string.h&gt;

Функция strchr - C++
Наткнулся я на функцию strchr и не могу понять что она делает можете мне привести пример-код где демонстрируются возможности этой функции и...

Функция strchr (Язык Си) -не выполняет=( - C++
Не могу понять почему не работает, обьясните, пожалуйста, как исправить!! вот такое работает (это пример из компилятора): char...

Функция strncpy не работает на строках длинее трех символов - C++
Подскажите, написал код... Хочу копировать каждое слово в g (т.е. s3). Функцией strncpy. Длину находит правильную, но при копировании...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
23.03.2007, 16:33 #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 позицию!
0
Stoun
0 / 0 / 0
Регистрация: 21.03.2007
Сообщений: 6
26.03.2007, 11:18  [ТС] #3
Ага, понял. Если строка длиннее чем определена, то начинаются глюки.
Тогда второй вопрос. Разве компилер сам не обрезает строки? Просто тупо пишет в память все что ему подсовывают? И при этом затирает содержимое следующих ячеек. Это так надо или можно как-то автоматизировать? Я же не знаю какой длины будет следующая строка.... Или сразу определять их с N-кратным запасом?
0
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
26.03.2007, 16:00 #4
Конечно компилятор так и поступает! Это ведь строки терминированные нулем! Массивы по сути. Можно пихать нуль а можно нет - вот когда ты пихаешь строку большего размера, у нее нет в конце нуля т.к. места и так не хватает, то нуль не поместился. А если хочешь автоматики - используй стандартный класс string
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2007, 16:00
Привет! Вот еще темы с ответами:

Не работает функция подсчета количества знаков в трёх вводимых строках - C++
Доброго времени суток. Ребят, пытался создал функцию, считывающую количество символов &quot; * &quot; (звездочка) в 3х строках. Не пойму почему не...

Как сделать, чтобы в окне программы при запуске переменные стояли на разных строках? - C++
как сделать что бы в окне программы(см. рисунок) при запуске,переменные (x1,y1,z1) и (x2,y2,z2) стояли на разных строках. Вот код...

В матрице выбрать n элементов в разных строках и разных столбцах так, чтобы их сумма была минимальной - C++
Помогите,пожалуйста Добавлено через 2 часа 23 минуты примерный алгоритм как это можно сделать

Почему-то на работает функция!( - C++
Задача написать функцию, упорядочивающую массив по возрастанию. почему-то не работает((( #include &quot;stdio.h&quot; int FUNC_Vozr (int...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2007, 16:00
Ответ Создать тему
Опции темы

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