2009-12-16 2 views
0

Ниже мой фрагмент кодавопрос о структурах с массив символов

struct encode 
{ 

    char code[MAX]; 

}a[10]; 

int main() 
{ 
char x[]={'3','0','2','5','9','3','1'}; 

    for(i=0;i<1;i++) 
    { 

     printf("%c",x[i]); 

//This will printout like 3025931 now I want this to be stored in structure.   
    } 

strcpy(a[0].code,x); 
// or 
a[0].code=x;//neither works 

display(); 

} 

void display() 
{ 
printf("%c",a[0].code); 
} 

Я хочу выход быть похожим: 3025931.

Который я не получаю из-за несовместимого типа назначения. Пожалуйста, скажите мне, где я иду не так.

+0

... что во имя codethulhu заключается в том, что 'strcopy' должен был делать? –

+0

Почему у вас есть функция, называемая дисплеем, которую вы даже не используете? –

+0

попробуйте использовать переменную «i» в файле strcpy (a [i] .code, a); вместо жесткого кодирования до 0? – EToreo

ответ

2

Здесь я вижу две проблемы. Во-первых, источник strcpy равен a, где он, вероятно, должен быть x.

Второй заключается в том, что x не заканчивается низом. Строки в C - массивы символов с нулевым символом.

Я хотел бы изменить две строки:

char x[] = {'3','0','2','5','9','3','1'}; 
strcpy(a[0].code, a); 

в:

char x[] = {'3','0','2','5','9','3','1', '\0'}; 
strcpy(a[0].code, x); 

Вот полная программа, которая дает вам то, что вы хотите (это фактически выводит номер дважды, один раз в ваш внутренний и один раз с помощью printf, чтобы вы видели, что они одинаковы):

#include <stdio.h> 
#include <string.h> 
#define MAX 100 
struct encode { 
    char code[MAX]; 
} a[10]; 

int main() { 
    int i, j; 
    char x[] = {'3','0','2','5','9','3','1','\0'}; 

    for(i = 0; i < 1; i++) { 
     for(j = 0; j < 7; j++) { 
      printf("%c", x[j]); 
     } 
     printf("\n"); 

     strcpy(a[0].code, x); 
    } 
    printf("%s\n",a[0].code); 
    return 0; 
} 

Обновление на основе комментариев:

Я сожалею. Я новичок в C. Я извинился за то, что вначале не правильно вставлял фрагмент кода: «printf («% c », [0] .code); не отображается «3025931».

Нет, не будет. Это потому, что a[0].code - это массив символов (строка в этом случае), и вы должны использовать "%s", не"%c". Изменение спецификатора формата в printf должно исправить эту конкретную проблему.

+0

... и, конечно, что новая инициализация 'x' может быть эквивалентно написана как' char x [] = "3025931"; ' – caf

+0

Прошу прощения, я новичок в 'c', извиняюсь за неправильное вложение фрагмента кода в начале .. void display() { printf ("% c", a [0] .code); } не отображает «3025931» – meg

+0

paxdiablo Спасибо за ваши ответы .. что, если я имею дело с массивом int, например struct encode { int code [MAX]; } a [10]; int x [] = {'3', '0', '2', '5', '9', '3', '1'}; Должен ли я использовать strcpy после преобразования из int [] в char []? – meg

0

Здесь

strcpy(a[0].code, a);

вы имели в виду

strcpy(a[0].code, x);

...?

Кроме того, x потребности быть нулем, или вам нужно заменить strcpy с strncpy или memcpy и передать в длину.

0

Эта линия не имеет особого смысла:

strcpy(a[0].code, a); 

Может быть, вы хотите это:

memcpy(a[0].code, x, sizeof x); 
    a[0].code[sizeof x] = '\0'; 

(Вторая линия необходима для NUL-code прекратить, что делает его правильную строку C).

0

В вашей программе много чего не так. Самая оскорбительная строка такова:

strcpy(a[0].code, a); 

, но есть и другие странности, например.

  • дисплей никогда не вызывается
  • только назначен (вид), но никогда не читал (за исключением дисплея, который никогда не называется)
  • петля я не имеет смысла

В принципе, эта программа выглядит как скопированная кем-то, кто понятия не имеет.

+1

«В принципе, эта программа выглядит как скопированная кем-то, у кого нет подсказки». Это необходимо? – ChaosPandion

+0

ChaosPandion: факт - факт –

+0

BTW, OP был сильно отредактирован, в начале было хуже –

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