Функция.ч
void copyArray(char, char);
Main.cpp
void copyArray(char word[], char temp[]) {
for (int i = 0; i < 50; i++) temp[i] = word[i];
}
автор.cpp
copyArray("CHAMPAGNE", char myArray[50]);
Вывод
C2664 'void copyArray(char,char)': cannot convert argument 1 from 'const char [10]' to 'char'
уже гуглил ошибку, искал функцию precoded, ничего не нашел Я не должен использовать строку
Объявление copyArray
не соответствует определению. Кроме того, вы не можете просто изобрести синтаксис, например copyArray("CHAMPAGNE", char myArray[50];);
@TedLyngmo copyArray("CHAMPAGNE", char myArray[50]);
я не понимаю, что не так? (точка с запятой после myArray — ошибка, этого нет в моем коде)
Обратите внимание, что temp[i] = word[i]
будет Неопределенным поведением, когда i
больше или равно длине word
. Кроме того, я бы сослался на вашу книгу С++ о том, как вызывать функцию....
@Джеффри да, но я не могу заставить его работать
Во-первых: объявление и определение не совпадают, поскольку в объявлении указано, что функция принимает две char
, а в определении указано, что функция принимает две char*
:
void copyArray(char, char); // declaration
void copyArray(char word[], char temp[]) { // definition
for (int i = 0; i < 50; i++) temp[i] = word[i];
}
Вам нужно сделать объявление таким же, как и определение:
void copyArray(char[], char[]); // or void copyArray(char*, char*);
... но для копирования из строковых литералов вам нужно сделать так, чтобы первый аргумент принимал const char*
, поскольку строковые литералы состоят из const char
s.
void copyArray(const char word[], char temp[]);
Однако в 50
нет char
"CHAMPAGNE"
, поэтому попытка скопировать их приведет к тому, что доступ к вашей функции "CHAMPAGNE"
выйдет за пределы допустимого (в результате поведение будет неопределенным). Вы не должны копировать дальше терминатора \0
:
void copyArray(const char* word, char* temp) {
do {
*temp++ = *word;
} while(*word++ != '\0'); // stop when \0 has been copied
}
Но убедитесь, что в temp
достаточно места для самой большой строки, которую вы пытаетесь в нее скопировать.
Если вы хотите скопировать CHAMPAGNE
в myArray
, вам нужно сначала объявить myArray
и передать его в качестве аргумента функции:
char myArray[50];
copyArray("CHAMPAGNE", myArray);
И затем, после исправления этого, вы можете выбросить copyArray()
и просто использовать вместо него strncpy()
(или эквивалент), что делает то же самое, что и copyArray()
, только безопаснее, например: char myArray[50]; strncpy(myArray, "CHAMPAGNE", sizeof(myArray));
Хочешь
void copyArray(char c, char array[]);
?