字符串和字符数组区别

char* a;char a[20];应该如何区别,使用范围各有什么限制。
char* a("asdfadf");这种初始化表示的是什么,与char a[8] = "asdfadf"一样吗,初始化的时候对长度有任何说明吗?
还有如何转化成LPVOID类型,作为参数传递,指针的那种形式我知道,数组形式怎么弄呢。

字符串和字符数组没有区别。
char *a; 是指针。
没有这种形式char* a("asdfadf");
char a[8] = "asdfadf"; 和 char *a="asdfadf"; 效果是一样的。
例如:
char *a="asdfadf"; // 声明和初始化
int i;
for (i=0;i<strlen(a);i++) printf("%c",a[i]); // 打出 asdfadf
printf("\n");
printf("%s\n",a); // 打出 asdfadf
printf("%s\n",a+2); // 打出 dfadf
同样:
char a[8]="asdfadf"; // 声明和初始化
int i;
for (i=0;i<strlen(a);i++) printf("%c",a[i]); // 打出 asdfadf
printf("\n");
printf("%s\n",a); // 打出 asdfadf
printf("%s\n",a+2); // 打出 dfadf追问

为什么有时候会提示无法从char* 转换为char[10],或者char[10]转换为char*,在参数传递的时候

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-05
以"\0"(引号中的部分)作为字符串结尾的。在\0之前的字符全都会被输出。而你的数组中没有定义\0,所以系统就不知道何时结束输出。就随便输出了几个值(随便这个定义可能不科学,因为系统实际上顺着该字符串的内存地址继续输出,实际已经超出了字符数组的内存地址)。
所以只要在字符串数组结尾添加一个元素\0即可。
另外标准的C++的main()函数必须是int型而不能是void型,且必须有返回值。void main()只能在微软的部分编译器上编译,而换一个编译器就会出现错误。所以建议将void main()改为int main()并添加return 0;

修改后的程序如下:
#include <iostream>
using namespace std;
int main()
{
char str[6]=;
cout<<str<<endl;
return 0;
}

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
第2个回答  2011-02-25
char *s="abcde",后面会自动添加'\0',但是char S[8]="abcdabcd",刚好是8格,就没有'\0'了
第3个回答  2019-12-23

10.3.1-C程序设计基础-字符数组与字符串

相似回答