对字符串的 C 指针操作会产生意外的输出

标签 c string pointers c-strings

以下两个程序使用一些基本的指针操作。但他们的表现不同。

#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/

相关文章:

JavaScript:编写在短语上执行 Pig Latin 的函数;循环似乎给出了奇怪的输出

c - 操作函数中的整数数组时发生堆栈粉碎错误

c - C 中的位移位和指针怪异,寻找解释

c - Linux 应用解码 mmc ext csd

c - 如何从txt文件中只读取字母字符,同时忽略空格和其他特殊字符?

c - 端口更改后 UDP 客户端服务器无法交换消息

objective-c - 删除第一个正斜杠之前的字符串部分

python - 使用 `str.format` 函数但不使用 %s 语法时出现键错误

c# - 使用 CLI 将 C# double 组传递给 C++ 函数

c - 在openGL程序中实现太阳能系统中的方向键