以下两个程序使用一些基本的指针操作。但他们的表现不同。
#include<stdio.h>
#include<string.h>
int main(void){
int a = 1;
int b = 2;
int *pb, *pc;
pb = &a;
pc = pb;
pb = &b;
printf("%d %d\n", *pb, *pc);
}
该程序按预期打印两个不同的数字(1 和 2),
#include<stdio.h>
#include<string.h>
int main(void){
char *ptr, s[10];
ptr = s;
gets(s);
printf("%s %s\n", ptr, s);
}
该程序打印相同的字符串两次,但它也必须打印不同的字符串。
为什么会出现这种差异?
gets()如何读取字符串?
最佳答案
第二个示例仅包含单个字符串缓冲区,即数组 s
。
使 ptr
指向 s
不会以任何方式创建字符数据的第二个副本,因此当您打印两个 ptr
时和 s
,它们会产生相同的字符串,因为它们计算出完全相同的地址。
关于对字符串的 C 指针操作会产生意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17362480/