c - 如何动态地将值从地址分配给指针?

标签 c pointers segmentation-fault scanf

导致段错误:

int n;
int *variable = scanf("%d",&n);
printf("Printing :%d",*variable);

没问题:

int n;
scanf("%d",&n);
int *variable = &n;
printf("Printing :%d",*variable);

如何在没有段错误的情况下实现第一个?

最佳答案

假设 scanf 成功,它返回 1(通常它返回已设置的变量数量)。

在第二个片段中,您丢弃了该(有用)信息,并将指针 varaible 设置为指向 n 的地址,这是完全有效的。 (如果 scanf 返回 0,则 n 将未初始化,并且 printf 调用的行为未定义。)

在第一个代码段中,根据返回值设置指向 int 常量 01指针 scanf 的值。这也很好,但是取消引用该指针的行为

*variable

未定义

如果您想要华丽,并与代码审阅者进行热烈的对话,您可以使用表达式分隔符并编写

int n;
int *variable = (scanf("%d",&n), &n);

但这很顽皮,因为您再次丢弃了 scanf 的返回值,并且 n 可能未初始化。

关于c - 如何动态地将值从地址分配给指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51823955/

相关文章:

c - 在 MS Windows 中运行时缺少 Gtk+ 图标

c - C语言中分隔字符串的函数

c - 带有二维动态阵列的分段故障(核心转储)

c - 使用 GDB 在 "?? ()"中出现内存故障

pointers - 无法反射(reflect)不返回指针,编译器在转换时出现 panic ?

c - C 编程中未知边界用法的数组

c - 将 TI CCS v3.3 与 TMS320F2812 结合使用,如何在 DSP 闪存和导出的 bin 文件中的特定地址处定义特定数据?

c - C 中的缓冲区数组用法

c++ - char a[] 的语义

c++ - 如果您不知道传递的方法的确切类,如何将方法传递给类