вопрос по структуре с массивом символов - PullRequest
0 голосов
/ 16 декабря 2009

Ниже приведен фрагмент моего кода

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.

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

Ответы [ 4 ]

2 голосов
/ 16 декабря 2009

Я вижу две проблемы здесь. Во-первых, источником 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 ", a [0] .code);" не отображается "3025931".

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

0 голосов
/ 16 декабря 2009

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

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

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

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

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

0 голосов
/ 16 декабря 2009

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

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

Возможно, вы хотите это:

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

(Вторая строка необходима для завершения нуля code, что делает ее правильной строкой C).

0 голосов
/ 16 декабря 2009

Здесь

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

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

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

...

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

...