у меня есть вопрос, я знаю следующая реализация работает правильно:C Программирование, изменение строкового значения в функции без прохождения размера в качестве параметра
void editMessage(char* message , int sizeOfMessage){
char newMessage[] = "modified";
printf("size of message is %lu \n",sizeof(message));
printf("size of new message is %lu \n",sizeof(newMessage));
if (sizeof(newMessage) <= sizeOfMessage) {
for (int i=0 ; i < sizeof(newMessage); i++) {
message[i] = newMessage[i];
}
} else {
printf("size of new message is too big\n");
}
}
int main() {
char randMessage[] = "original message";
editMessage(randMessage,sizeof(randMessage));
printf("the value of randMessage after function call is %s \n",randMessage);
return 0;
}
, но если я хочу, чтобы изменить значение строки в функции без прохождения размер указателя, возможно ли это? если да, то как? если нет, почему бы и нет?
я имею в виду я ищу, чтобы изменить выше editMessage Функция что-то вроде этого:
void editMessage(char* message){
char newMessage[] = "modified";
printf("size of message is %lu \n",sizeof(message));
printf("size of new message is %lu \n",sizeof(newMessage));
if (sizeof(newMessage) <= sizeOf(message)) {
for (int i=0 ; i < sizeOf(message); i++) {
message[i] = newMessage[i];
}
} else {
printf("size of new message is too big\n");
}
}
и вызова в основной, как этот
editMessage(randMessage);
, почему это не работает, может один, пожалуйста, объясните в деталях, и тогда я бы принял его ответ? Спасибо!
'sizeof (message)' - * размер указателя *, а не размер объекта, на который он указывает. – EOF
Используйте 'strlen', чтобы получить длину * строки. –
@ user3001566 По крайней мере, первая функция, которую вы показали, неверна и не имеет смысла. :) –