Добавление строки в структуры в C - PullRequest
1 голос
/ 29 февраля 2012

Я новичок в C и у меня возникли проблемы со структурами в C. Вот мой код;

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

struct rec
{
    char i;
    char b;
    char j;
} ;

int main()
{

 struct rec *p;
 p=(struct rec *) malloc (sizeof(struct rec));
 (*p).i='hello';
 (*p).b='world';
 (*p).j ='there';
 printf("%c %c %c\n",(*p).i,(*p).b,(*p).j);

 free(p);
 getch();
 return 0;
}

Выход из этого; о д

Как мне передать целое слово, а не одну букву.

Ответы [ 2 ]

1 голос
/ 29 февраля 2012

Определить элементы структуры как char *:

struct rec
{
    char *i;
    char *b;
    char *j;
} ;

и используйте printf с %s:

printf("%s %s %s\n",(*p).i,(*p).b,(*p).j);

Кроме того, вам необходимо заменить ' на ": (*p).j ="there";, и если вы присваиваете строковые литералы (которые нельзя изменить), измените члены структуры на const:

struct rec
{
    const char *i;
    const char *b;
    const char *j;
} ;
0 голосов
/ 29 февраля 2012

Общий тип строки в C это char*, что означает указатель на массив char элементов. C отмечает конец строки специальным символом \0. Эти строки обычно называют 0-концевыми строками.

Чтобы сохранить один в вашей структуре вам нужно что-то вроде этого:

struct foo {
  char* words;
};

Символьные литералы (встроенные строки a.k.a) имеют тип const char[n], где n - длина строки плюс один элемент для нулевой терминатор, поэтому вы не можете назначить символьный литерал char*. Вам нужно будет выделить strlen(x) + 1 char элементов и затем скопируйте содержимое строкового литерала в эту память. не забудьте освободить его.

Возможно, вам следует сначала попытаться понять указатели и массивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...