2013-10-07 2 views
0

Я пытаюсь хранить символы, считанные из файла, в массив символов, но он также сохраняет все последующие символы. Для этого кода я создал структуру и функцию для инициализации массива.C - Строки в структурах, возвращающие весь массив

От "Structures.h"

typedef struct (
    int size; 
    char *elem; 
    } cvector; 

С "Utilities.c"

cvector make_cvector (int size) 
    { cvector temp; 
     temp.size = size; 
     temp.elem = calloc(size, sizeof(char)); 
     return temp; 
    } 

Тогда я пытаюсь прочитать текстовый файл, который говорит: "ABC"

В теле я заявил: (где nPtr является указателем для открытия файла)

cvector NodeID; 
NodeID = make_cvector(3); 
for(i=0;i<3;i++){ 
     fscanf(nPtr,"%s", &NodeID.elem[i]); 
     printf("%s ",&NodeID.elem[i]); 
} 

Это приводит к «Азбуке» Но сразу после этого цикла я ввел еще один цикл:

for(i=0;i<3;i++) 
     printf("%s ", &NodeID.elem[i]); 

Итогового к «Азбуке Ьса с» Когда на самом деле я хочу «а», «б» и «в» хранимом в отдельности. Возможно, что-то не так с моей инициализацией или указателями, но я пытался читать онлайн безрезультатно. Где могла быть ошибка? Спасибо!

ответ

2

Вы печатаете строку, когда то, что вы действительно хотите сделать, это печать одного символа. Заменить

printf("%s ",&NodeID.elem[i]); 

по

printf("%c ",NodeID.elem[i]); 

и он должен работать.

+0

Спасибо за это, и я понимаю ошибку. Тем не менее, печать была всего лишь средством для демонстрации моей проблемы. Реальная проблема, с которой я столкнулся, была в последней части, где я положил: 'if (strcmp (LoadLoc, & NodeID.elem [j]) == 0)' , которого в принципе никогда не было. Я полагаю, что ошибка тогда не связана с инициализацией, но с использованием «strcmp», что было бы подходящей альтернативой? : D Я также попытаюсь выполнить поиск в Интернете. Большое спасибо, сэр! – user2853084

+0

'LoadLoc' - это строка, содержащая один символ, не так ли? Если это так, тогда вместо этого загрузите 'LoadLoc' в' char' и выполните 'if (LoadLoc == NodeID.elem [j])' – Simon

+0

Спасибо! Это сработало, но я хотел сохранить определенный уровень универсальности, поскольку некоторые части программы могут перейти к сравнению строк, а не только символов. Во всяком случае, я решил проблему, инициализируя их как «cmatrix» вместо «cvector», где первое измерение представляет собой массив строк, а второе измерение - массив символов в строке. Спасибо за помощь! : D – user2853084

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