2015-01-21 3 views
0

Это незавершенный код для преобразования буквенно-цифровых символов в код Морзе. Пока что только символ «А» установлен. Кажется, я не могу скопировать строку кодов Морса «a» в переменную «c». Компилятор говорит мне, что передающий аргумент 1 из strcpy делает указатель из целого без литого.Я не могу понять strcpy

#include <stdio.h> 
#include <ctype.h> 
#include <string.h> 

int main(){ 
    char c; /* variable to hold character input by user */ 
    char sentence[ 80 ]; /* create char array */ 
    int i = 0; /* initialize counter i */ 
    const char *a = ".- "; 

    /* prompt user to enter line of text */ 
    puts("Enter a line of text:"); 

    /* use getchar to read each character */ 
    while ((c = getchar()) != '\n') { 
     c = toupper(c); 
     switch (c){ 
      case 'A': 
       strcpy(c, a); 
       break 
      } 
     sentence[ i++ ] = c; 
    } /* end while */ 

    sentence[ i ] = '\0'; /* terminate string */ 

    /* use puts to display sentence */ 
    puts("\nThe line entered was:"); 
    puts(sentence); 
    return 0; 
} 
+1

'getchar' возвращает' int' (а не 'char'), изменение' Int с; 'и' strcpy' хочет 'обугленного *' (а не 'char') в качестве первого аргумента –

+2

Цель вашего' strcpy' as-written - это 'char'. Это должно быть 'char *' Это было бы неправильно с get-go. – WhozCraig

+0

'strcpy' (не strcopy) копирует строку в строку, а не строку для символа. – bolov

ответ

0

c это один символ, а a является строка (что объясняет и почему c может содержать только один символ, и почему компилятор жалуется). Если вы хотите, чтобы c содержал целую строку, объявите ее как таковой (например, для sentence).

0

Вы объявили переменную c иметь тип char:

char c; 

Затем вы пытаетесь использовать strcpy(c,a) - но какой тип имеет strcpy ожидать первого аргумента? Вот подпись из страницы руководства:

char *strcpy(char *dest, const char *src);