【发布时间】:2016-09-01 19:21:00
【问题描述】:
所以我在面试中被问到这两个问题-
1-如果我在 C 中有这样的代码 sn-p 会是什么输出
char *ptr1=malloc(10);
ptr1="abc";
char *ptr2 = malloc(20);
ptr2="defghi";
strcpy(ptr1,ptr2);
printf("%s",ptr1);
我回家后在我的终端上尝试了这个,它给出了这个错误
[1] 7673 bus error ./b.out
我想知道在这种情况下如何将字符串从一个指针复制到另一个指针。
2- 我们有 2 个进程 A 和 B
这是进程A中的代码
char *ptr1=malloc(10);
ptr1="abc";
char *ptr2 = malloc(20);
ptr2="defghi";
strcpy(ptr1,ptr2);
现在ptr1的地址通过进程间通信传递给进程B,进程B中的代码如下(ptr1是进程A的地址)
char *ptr3=malloc(10);
ptr3=ptr1
printf("%s",ptr3);
这会是什么输出?如果 ans 是垃圾值或错误,那么我们如何使 ptr3 指向 ptr1 指向的字符串。
【问题讨论】:
-
这段代码没有意义。您将内存分配给 ptr1,然后将 ptr1 重新分配给一个常量字符串值。这在内存中的某个地方是固定的。您不能只是将“defghi”复制到 ptr1 中。
-
他们正在测试你是否知道 C 代码的作用。很明显你没有通过面试。在情况 1 中,您不仅用字符串字面量指针覆盖
malloc指针,并尝试将一个字符串字面量复制到另一个字面量,而且您要复制到的字符串字面量(即使它是合法的)更小。 -
@OldProgrammer 我不明白为什么这段代码没有意义。据我说,我们首先为 ptr1 分配了一些空间,然后我们在那个空间中填写了“abc”,我们做了同样的事情ptr2 然后尝试用 ptr2 中存在的内容填充 ptr1 块,然后打印结果。请告诉我哪里出错了。
-
@KaviKavi 请阅读更多 C 教程和参考资料,您似乎对 C 程序中发生的事情有一个非常模糊的看法。 “为指针分配空间”没有意义。
-
@unwind 我所说的“为指针分配空间”是指指针指向 malloc 函数给出的内存块的第一个内存位置。如果我错了,请纠正我。