通过C中的函数更改字符串

通过C中的函数更改字符串,c,string,C,String,免责声明:下面的代码取自youtube上的Derek Banas,我只是不明白为什么它能工作 在下面的代码中,即使字符串大小不同,也会更改整个字符串。但是,当for循环没有遍历所有索引时,我不理解整个字符串是如何更改的。例如,如果oldString的长度为10,而newString的大小为5,那么下面的For循环会将oldString上的索引0更改为4(据我所知),但是字符串的其余部分会以某种方式被删除,我不确定如何删除。我自己测试了代码,它确实有效 #include <string.h&

免责声明:下面的代码取自youtube上的Derek Banas,我只是不明白为什么它能工作

在下面的代码中,即使字符串大小不同,也会更改整个字符串。但是,当for循环没有遍历所有索引时,我不理解整个字符串是如何更改的。例如,如果oldString的长度为10,而newString的大小为5,那么下面的For循环会将oldString上的索引0更改为4(据我所知),但是字符串的其余部分会以某种方式被删除,我不确定如何删除。我自己测试了代码,它确实有效

#include <string.h>
#include <stdio.h>
void editMessageSent(char* message, int size){
    char newMessage[] = "New Message";
    if(size > sizeof(newMessage)){
        for(int i = 0; i < sizeof(newMessage); i++){
            message[i] = newMessage[i];
        } 
    } else {
        printf("New Message is too big\n\n");
    }
}
void main(){
    // Passing a String to a Function ----
    char randomMessage[] = "Edit my function";
    printf("Old Message: %s \n\n",
        randomMessage);
    editMessageSent(randomMessage, 
        sizeof(randomMessage));
    printf("New Message: %s \n\n",
        randomMessage);
    }
#包括
#包括
void editMessageSent(字符*消息,整数大小){
char newMessage[]=“新消息”;
如果(大小>sizeof(新消息)){
for(int i=0;i
如果新字符串较短,空终止符“\0”也会复制到旧字符串中

editMessageSent
之后,例如,如果新字符串是
“hello”


printf
中的
“%s”
输出字符串,直到第一个
'\0'

新消息包含一个隐式
\0
以终止字符串常量。检查
sizeof(newMessage)
(或在调试器中单步执行循环)的结果。谢谢。所以字符串的大小保持不变,有没有办法改变大小,这样就不会占用额外的空间?(看起来很轻微)。或者您真的需要为此创建一个新字符串吗?
randomMessage
是一个数组,其大小是恒定的。@user120920如果该字符串是从malloc获得的,则可以使用realloc返回额外的空间。但在这段代码中,它是一个在编译时分配的17个字符(sizeof(“Edit my function”)==17)的数组,不能更改。
"Edit my function"  ->  "hello\0y function"