• 3461阅读
  • 1回复

Question  6.5:Why can't I do something lilke this? [复制链接]

上一主题 下一主题
离线那个谁
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2013-07-09
— 本帖被 tyrone2497谁 执行加亮操作(2013-07-16) —

Q: Why can't I do something like this?
                        extern char *getpass();
                        char str[10];
                        str = getpass("Enter password: ");
A: Arrays are ``second-class citizens'' in C; one upshot of this prejudice is that you cannot assign to them (see also question 6.7). When you need to copy the contents of one array to another, you must do so explicitly. In the case of char arrays, the strcpy routine is usually appropriate:
                 strcpy(str, getpass("Enter password: "));
(When you want to pass arrays around without copying them, you can use pointers and simple assignment. See also question 4.1.)
See also question 8.2.
离线那个谁

只看该作者 沙发  发表于: 2013-07-09
问题:为什么我不能这样做?
             extern char *getpass();
                        char str[10];
                        str = getpass("Enter password: ");


回答:数组在C语言中是“二等公民”;这样的一种偏见的结果就是你不能对它们重新分配空间,即赋值(注意这里要与数组的初始化区别开来,参考问题6.6b)(也可以参考问题6.7)。当你想要拷贝一个数组的内容到另一个数组的时候,你必须明确的去做。对于字符数组的情况,strcpy函数通常是很合适的做法:
              strcpy(str, getpass("Enter password: "));
(当你想要传递数组而不是复制它们,你可以使用指针直接赋值。参考问题4.1)。
参考问题8.2。
注意对于上面的情况,我们避免的方式是,首先要记住我们定义了一个数组后,数组的名字就是该数组的首地址,并且它是在内存中的位置是固定的,即一个常量,所以我们对一个常量是不能赋值操作的。而如果是一个指针的话,如char *p,那么它就是一个变量,所以这也是数组名和指针的一个区别所在。但是当数组作为函数的参数的时候,它就退化为指针了。)

快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个