在 C 中,char 类型与 char * 类型不兼容。仅仅因为它们是不同的类型。根据定义,char 保证是最小的类型(大小为 1)。 char * 的大小与任何指针相同:它必须足够大以容纳内存地址:通常在 32 位系统上为 4,在 64 位系统上为 8。
您正在将字符串常量分配给声明为char 的变量,该分配期望右手参数类似于以下内容:
char foo = 'a';//single quotes indicate a char
或者,也许更多你的想法:
const char *foo = "April.txt";//double quotes indicative of char *
注意const存储类:字符串常量不会被赋值给变量,而是filename的值将是字符串的内存地址,存储在只读 记忆。因此,它是一个const:你不能改变它:
const char *foo = "foobar";
foo[0] = 'F';//<-- ERROR
为了能够修改值,写:
char foo[] = "foobar";
foo[0] = 'F';//Success!
这将创建一个足够大的数组以容纳字符串,并复制字符。当然,如果你的 var 的值可能会改变,它也有可能足够大以容纳更大的字符串,在这种情况下:
char foo[100] = "up to 100 chars";
strcat(foo, "!!");
或者,使用动态内存(但尽可能避免,因为堆速度较慢并且需要您更多关注):
char *foo = malloc(20);//begin with 20 chars
if (foo == NULL)
exit( EXIT_FAILURE);//no memory could be allocated
strcpy(foo, "foobar");//copy string value into allocated memory
foo = realloc(foo, 50);//increase amount of allocated memory to hold 50
if (foo == NULL)//safety first:
exit(EXIT_FAILURE);
strncat(foo, "some huuuuuuge string", 30);//strncat for safety, again
嗯,有多种方法可以做事,这取决于您的具体需求