2015-03-18 3 views
-1

я в настоящее время код:Строки и связанные списки - C Программирование

struct node 
{ 
    int data; 
    struct node *next; 
}*head,*var,*trav; 

void insert_at_end(int value) 
{ 
     struct node *temp; 
     temp=head; 
     var=(struct node *)malloc(sizeof (struct node)); 
     var->data=value; 
     if(head==NULL) 
     { 
      head=var; 
      head->next=NULL; 
     } 
     else 
     { 
      while(temp->next!=NULL) 
      {  
       temp=temp->next; 
      } 
      var->next=NULL; 
      temp->next=var; 
     } 
} 

void display() 
{ 
    trav=head; 
    if(trav==NULL) 
    { 
      printf("\nList is Empty"); 
    } 
    else 
    { 
      printf("\nElements in the List: "); 
      while(trav!=NULL) 
      { 
       printf(" -> %d ",trav->data); 
       trav=trav->next; 
      } 
     printf("\n"); 
     } 
} 

int main(){ 

    int value; 
    scanf("%d", &value); 
    insert_at_end(value); 
    display(); 
    return 0; 
} 

Все отлично подходит для вставки Int работает. Но я хочу вставить строку. Слово вроде «Собака». I изменено

int data to char data[255]; 

И изменил все экземпляры «% d» на «% s», но это не сработает. У кого-нибудь есть идеи? Благодарю.

+1

Вы должны предоставить код, который, по вашему мнению, должен делать все, что вы хотите. –

+0

Вам придется «strcpy» ваши данные вместо назначения. Прямое назначение не работает с массивами. –

+1

Как вы обновляете 'var-> data = value;'? Не бросать malloc –

ответ

1

Вы должны иметь следующие изменения:

  1. "ИНТ данные" в "символьных данных [255]"

  2. Изменение аргумент insert_at_end в "символ * значение"

  3. Следующие строки вместо назначения в insert_at_end:

    strncpy (var-> data, value, sizeof (var-> data));

    var-> данные [sizeof (var-> data) -1] = '\ 0';

  4. Изменение,% d в% S

  5. изменить код, который считывает значение от входа в следующем:

    значения символа [255];

    fgets (value, sizeof (value), stdin);

    insert_at_end (значение);

Этот код не перекрывает новую строку, которую будет читать fgets. Для читателя оставлено упражнение, как снять лишнюю новую строку. Кроме того, для читателя оставлено упражнение для динамического распределения памяти, чтобы можно было поддерживать строки переменной длины (подсказка: используйте malloc и не забудьте освободить его!)

Однако, чтобы понять, почему эти изменения должны быть и понять, как массивы, строки и указатели работают в CI, рекомендуем прочитать базовую книгу C. Полное объяснение не вписывается в этот ограниченный ответ. Я вижу из вашего вопроса, что вы не понимаете некоторые основные принципы C, и это может быть так, что C не обязательно является лучшим языком для вас сейчас.

Я также рекомендую прочитать некоторые основные правила безопасного кодирования, чтобы понять, почему назначение «\ 0» выполняется после strncpy, поскольку strncpy является неотъемлемой небезопасной функцией.

Смежные вопросы