Запись в строку

Тема в разделе "Общие вопросы по С и С++", создана пользователем vani2, 12 дек 2010.

  1. vani2

    vani2 Гость

    Как записать в строку s посимвольно?
    Описание char *s,c.
    Под s нужно динамически выделять память при этом?
    Заранее благодарен.
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Выделение памяти:
    Код (C++):
    char *s;
    s = new char [1024];
    Запись посимвольно:
    Код (C++):
    s[0] = 'a';
    ...
    s[1023] = 'b';
     
  3. vani2

    vani2 Гость

    Спасибо, lazybiz. А как это будет выглядеть на С? new char заменить на malloc?
    И еще : я не знаю наперед число символов, так что 1024 нельзя писать)
    И как её потом очистить для повторного использования. Использую С ANSI.
     
  4. ensane

    ensane Гость

    Код (C++):
    #include <stdlib.h>
    ...
    size_t size = 1;
    char s* = (char *)malloc(size*sizeof(char));//выделяем память для первого символа
    ...
    char c='a';
    ...
    s[size]=c;
    size++;
    s* = (char *)realloc(s, size*sizeof(char));//добавляем немножко памяти
    ...
    free(s);//чистим за собой.
    Работает медленно (относительно), зато использует минимум памяти.
     
  5. vani2

    vani2 Гость

    Спасибо.
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    ensane
    Тут по-моему должно быть:
    Код (C++):
    char *s = (char *)malloc( size );
    У типа char не стоит мерить размер, он всегда равен 1, вне зависимости от компилятора.
    И звездочка должна быть перед s во время определения.
     
  7. ensane

    ensane Гость

    lazybiz
    Да, 1 байт. Но sizeof я добавляю всегда. Вопрос привычки.
     
  8. vani2

    vani2 Гость

    Выдаёт ошибку incompatible types in assignment

    <!--shcode--><pre><code class='с'>s[size]=c;[/CODE]

    В чём дело? B)
     
  9. ierofant

    ierofant Гость

    Какие типы у s и у с?
     
  10. vani2

    vani2 Гость

    char *s,c
     
  11. ierofant

    ierofant Гость

    Как насчёт:
    Код (C++):
    s[size - 1]=c;
    ?
    Конечно без вашего кода сложно судить... Вы почему-то радуете нас маленькими кусочками.
     
  12. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    vani2
    Пока не покажешь код, мы тебе помочь не сможем. Или хотя сделай так, чтобы нам было понятно с чем мы имеем дело.
     
  13. vani2

    vani2 Гость

    Как выше описано: ошибка на * перед s.

    Так в gcc выдаёт warning, но работает.В borland error.

    <!--shcode--><pre><code class='c'>char c,*s;[/CODE]
    <!--shcode--><pre><code class='c'>while (c!='\x3B') {
    *(s+i)=(char*)malloc(sizeof(char));
    s=c;
    i++;
    c=fgetc(d);}[/CODE]
    Так error и warning нет, но не работает-считыват непонятно что.

    <!--shcode--><pre><code class='c'>while (c!='\x3B') {
    s=(char*)calloc(1,sizeof(char));
    s=c;
    i++;
    s=(char*)realloc(s,i*sizeof(char));
    c=fgetc(d);}[/CODE]
     
  14. ierofant

    ierofant Гость

    Код (C++):
    *(s+i)=(char*)malloc(sizeof(char));
    Вас не смущает, что вы присваиваете типу char указатель на char ?
    warning это ведь не просто надоедливая надпись, полезно читать, что там пишется, тогда вы бы и сами эту ошибку нашли.

    Добавлено:
    Код (C++):
    char *ptr = s + 1;
    ptr = (char*)malloc(sizeof(char));
     
  15. vani2

    vani2 Гость

    Я был в замешательстве-программа работала, и я не знал как исправить.

    Вот так всё работает без ошибок и предупреждений.Я Вам, ierofant, весьма признателен.
    <!--shcode--><pre><code class='c'>while (c!='\x3B') {
    ptr=s+1;
    ptr=(char*)malloc(sizeof(char));
    s=c;
    i++;
    ptr=(char*)realloc(s,i*sizeof(char));
    c=fgetc(d);}[/CODE]
     
Загрузка...

Поделиться этой страницей