我对某事有点困惑。我的印象是读取 C 字符串的正确方法是scanf()
沿着
(不用担心可能的缓冲区溢出,这只是一个简单的例子)
char string[256];
scanf( "%s" , string );
然而,以下似乎也有效,
scanf( "%s" , &string );
这只是我的编译器(gcc)、纯粹的运气还是其他原因?
数组“衰减”为指向其第一个元素的指针,因此scanf("%s", string)
相当于scanf("%s", &string[0])
。另一方面,scanf("%s", &string)
传递一个指向-的指针char[256]
,但它指向同一个地方。
Then scanf
,在处理其参数列表的尾部时,将尝试拉出一个char *
。当你通过时,这就是正确的事情string
or &string[0]
,但是当你通过了&string
您依赖于语言标准无法保证的东西,即指针&string
and &string[0]
-- 指向从同一位置开始的不同类型和大小的对象的指针 -- 以相同的方式表示。
我相信我还没有遇到过无法正常工作的系统,而且实际上您可能是安全的。尽管如此,这是错误的,并且在某些平台上可能会失败。 (假设示例:“调试”实现,其中包含每个指针的类型信息。我think符号“Lisp Machines”上的 C 实现做了类似的事情。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)