gpt4 book ai didi

c - 为什么在c中会发生这种情况?

转载 作者:行者123 更新时间:2023-11-30 18:22:51 24 4
gpt4 key购买 nike

void xstrcpy ( char *t, char *s );

void main(void ) {
char source[ ] = "Sayonara" ;
char target[20] ;
xstrcpy ( target, source ) ;
printf ( "\nsource string = %s", source);
printf ( "\ntarget string = %s", target ) ;
}

void xstrcpy ( char *t, char *s ) {
while ( *s != '\0' ){
*t = *s ;
t++ ; s++ ;
}
*t = '\0' ;
}

此代码给出输出:

source string = Sayonara 
target string = Sayonara

但是当我将 char target[20]; 更改为 char target[8]; 时,它会给出:

source string =  target string = Sayonara

当我将 char target[20]; 更改为 char target[4]; 时,它会给出:

source string = nara 
target string = Sayonara

当我将 char target[20]; 更改为 char target[3]; 时,它给出:

source string = nara 
target string = Sayonara

为什么源值改变了,而目标变成了字符串大小的数组?

最佳答案

当您的目标比所需的短时,它会覆盖其后面的任何数据。特别是,当您将其设置为 8 时,它会覆盖源代码的开头并以零结尾。当您将其设为 4 时,它会用源字符串的尾部覆盖源代码。

这就是正在发生的事情。当然,虽然不能保证这种行为是未定义的。

关于c - 为什么在c中会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com