我只是乱搞strncpy.
我的程序看起来像这样
typedef struct
{
char from_str[10];
}test;
main ()
{
test s1;
memset(&s1,0,sizeof(test));
char src[10]="himansh";
char dest[10];
memset(dest,0,10);
src[3]='\0';
printf("src is %s and strlen is %d \n",
src,strlen(src));
fflush(stdout);
strncpy(s1.from_str,src,100);
printf("s1.from_str is %s , src is %s \n",
s1.from_str,src);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在我执行strncpy之前,我在"src"字符串中添加了一个"\ 0"字符,"src"字符串的长度变为3,目标数组的大小为10.但是在strncpy中我将要复制的字节数复制为100 .
这意味着我的源字符串以NULL结尾.现在strncpy像任何字符串函数应该尝试只复制3个字节,即使我提供的字节数大于3(在这种情况下为100).它做到了,但我也得到了分段错误.
我的结果如下所示
src is him and strlen is 3
s1.from_str is him , src is him
Segmentation fault (core dumped)
Run Code Online (Sandbox Code Playgroud)
为什么这个分段错误发生在这里.
有人可以帮我从这里出去吗.