阅读 ‧ 电子书库 说  明
如果您的编译器不支持%p,可以使用%u或%lu作为替代。

看一下这个程序,您会以为它复制了字符串“Don't be a fool! ”,而且乍一看结果似乎也验证了您的猜测。

阅读 ‧ 电子书库

阅读 ‧ 电子书库

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

但是再仔细研究一下函数printf()的输出。首先,mesg和copy以字符串形式(%s)输出。这里并没有奇怪的事情发生,两个字符串都是“Don't be a fool! ”。

每一行的下一项是指定指针的地址。mesg和copy这两个指针分别存放在位置0x0064fd58和0x00064fd5c。

现在注意一下最后一项,即value。它是指定指针的值。指针的值是该指针中存放的地址,可以看到mesg指向位置0x0040c000, copy也是如此。因此,字符串本身没有被复制。语句copy=mesg;所做的事情就是产生指向同一个字符串的第二个指针。

为什么如此谨慎行事?为什么不干脆复制整个字符串?好了,问一下自己哪一种方法更有效率?复制一个地址还是复制50个单个的元素?通常,只有地址才是程序执行所需要的。如果确实需要复制字符串,可以使用函数strcpy()或strncpy(),这两个函数会在本章稍后讨论。

我们已经讨论了如何在程序中定义字符串,现在来看一看如何从键盘输入字符串。