error C2440: '=' : cannot convert from 'char (*)[6]' to 'char [256]'
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
char string_wifiname[100];
char string_keyword[100];
char wifi[] = "netsh wlan set hostednetwork mode=allow ";
char a[10];
char ssid[]="ssid=";
char keyword[]=" key=";
scanf("%s",&string_wifiname);
strcat(ssid,string_wifiname);
a=&ssid;
scanf("%s",&string_keyword);
strcat(keyword,string_keyword);
printf("%s\n",ssid);
}
异常
Compiling...
demo5.cpp
D:\Myself\VC++6.0\VC6CN\MyProjects\demo5\demo5.cpp(16) : error C2440: '=' : cannot convert from 'char (*)[6]' to 'char [10]'
There are no conversions to array types, although there are conversions to references or pointers to arrays
执行 cl.exe 时出错.
demo5.obj - 1 error(s), 0 warning(s) 展开
没搞明白你是想通过 a=&ssid; 达到什么目的?后面也并没有用到 a 啊。
a 被声明成 char array,不能这样直接赋值的,更何况,&ssid 是取一个字符数组的地址,与a的类型不匹配。
即使改成 a=ssid 也不行,因为 char [6] 和 char [10] 也是不能转换的,仍然会导致C2440错误。
再进一步,声明 char a[6]; 也不行,因为 a 不是左值(l-value),会导致C2106错误。
如果你是想把ssid的地址传给a,那么应该把a声明成为一个字符类型的指针;
如果你是想把ssid的内容复制到a里面去,那么应该用strcpy函数,或者用循环来完成。
我主要是想把输入的ssid和输入的keyword拼接到字符串中,然后再将拼接后的ssid和keyword拼接到一个字符串中,且中间有空格。。。 然后就弄不明白了,直接接的话,环境就崩了。。包括按照你说的用strcpy函数,环境还是崩。。。
1、你现在程序最大的问题是,使用strcat进行字符串拼接,但用于保存结果的字符串并未定义足够的空间。例如,第一处
strcat(ssid,string_wifiname);
其作用是把string_wifiname的内容附加到ssid上,但ssid按照定义其长度为6,所以拼接的结果必然会超出ssid的存储范围,从而导致不确定的后果。正确的做法是,要给保存结果的字符串分配足够的空间,或者,使用更安全的CString类来进行字符串操作。
2、即使存在上述问题,多数情况下应该也不会导致崩溃,至少,我这里把出错的那句删掉之后,程序是可以运行的(未崩溃)。
3、按照惯例,使用sscanf输入数据,一般应该先用printf给出提示。