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

  • Автор темы vani2
  • Дата начала
V

vani2

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

lazybiz

Well-known member
03.11.2010
1 339
0
#2
Выделение памяти:
C++:
char *s;
s = new char [1024];
Запись посимвольно:
C++:
s[0] = 'a';
...
s[1023] = 'b';
 
V

vani2

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

ensane

#4
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);//чистим за собой.
Работает медленно (относительно), зато использует минимум памяти.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#5
ensane
C++:
char s* = (char *)malloc(size*sizeof(char));//выделяем память для первого символа
Тут по-моему должно быть:
C++:
char *s = (char *)malloc( size );
У типа char не стоит мерить размер, он всегда равен 1, вне зависимости от компилятора.
И звездочка должна быть перед s во время определения.
 
E

ensane

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

vani2

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

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

В чём дело? B)
 
I

ierofant

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

lazybiz

Well-known member
03.11.2010
1 339
0
#11
vani2
Пока не покажешь код, мы тебе помочь не сможем. Или хотя сделай так, чтобы нам было понятно с чем мы имеем дело.
 
V

vani2

#12
Как выше описано: ошибка на * перед 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]
 
I

ierofant

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

Добавлено:
C++:
char *ptr = s + 1;
ptr = (char*)malloc(sizeof(char));
 
V

vani2

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

Вот так всё работает без ошибок и предупреждений.Я Вам, 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]