我试图了解strcpy和strncpy的区别/缺点.有人可以帮忙:
void main()
{
char src[] = "this is a long string";
char dest[5];
strcpy(dest,src) ;
printf("%s \n", dest);
printf("%s \n", src);
}
Run Code Online (Sandbox Code Playgroud)
输出是:
this is a long string
a long string
Run Code Online (Sandbox Code Playgroud)
问题:我不明白,源sting是如何被修改的.根据解释,strcpy应该继续复制,直到它遇到'\ 0',所以它确实如此,但为什么"src"字符串被修改.
请解释.
当我尝试某事时(我只是为了理解),我得到了这个.请解释一下这种行为:
第一次尝试:
void main()
{
char src[] = "vinay";
int i;
// char name[5] = "test";
char *name= "abcde";
printf("%s \n", name);
if (*(name+5) == '\0')
printf("6th char is null\n");
strcpy(name,src);
printf("printcheck \n");
for (i=0 ; i <6 ; i++)
{
printf("%c \n", *(name+i));
}
printf("%s \n",name);
}
Run Code Online (Sandbox Code Playgroud)
输出:
abcde
6th char is null
zsh: 16644 segmentation fault (core dumped) a.out
Run Code Online (Sandbox Code Playgroud)
第二次尝试:
void main()
{
char src[] = "vinay";
int i;
char name[] = "pqrst";
//char *name= "abcde";
printf("%s \n", …Run Code Online (Sandbox Code Playgroud) 我正在编译这段代码,我得到编译错误,说"解除指向不完整类型的指针".我得到了最后一个print语句的错误,在此之前我尝试指向(*temp).num到b的地址
void main()
{
struct {
int xx;
char *y;
int * num;
struct x *next;
}x;
struct x* temp;
int b = 10;
temp = ((struct x *)malloc(sizeof(x)));
(*temp).num = &b;
x.next = temp ;
printf(" %d\n",temp->num, x.next->num);
}
Run Code Online (Sandbox Code Playgroud)