我有一個問題,我知道下面的實現正常工作: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'來獲取字符串的* length *。 –
@ user3001566至少你顯示的第一個函數是不正確的,沒有任何意義。:) –