我想知道为什么第一个代码有效但第二个代码没有。
#include <stdio.h>
#include <string.h>
int main()
{
char *last, *first, *middle;
char pres[20] = "Adams, John Quincy";
char pres_copy[20];
strcpy(pres_copy, pres);
last = strtok(pres_copy, ", ");
printf("%s", last);
first = strtok(NULL, ", ");
printf("%s", first);
middle = strtok(NULL, ", ");
printf("%s", middle);
}
#include <stdio.h>
#include <string.h>
int main()
{
char last[20], first[20], middle[20];
char pres[20] = "Adams, John Quincy";
char pres_copy[20];
strcpy(pres_copy, pres);
last = strtok(pres_copy, ", ");
printf("%s", last);
first = strtok(NULL, ", ");
printf("%s", first);
middle = strtok(NULL, ", ");
printf("%s", middle);
}
我认为数组名称与指针相同。
但是编译器正在进行区分,因为它告诉我类型'char [20]'
和类型'char *'
是不兼容的。
两种数据类型的不同之处和原因是什么?
答案 0 :(得分:2)
数组不是指针。您正在尝试分配指向数组的指针。请参阅有关数组和指针的this C FAQ条目。
答案 1 :(得分:0)
'char [20]'和类型'char *'是不兼容的。char *
可以指向char
的指针,表示它可以存储char
的地址而非简单{{1} }。char
是一个20个字符的数组(不是字符的地址)。
使用数组的名称使它成为第一个元素的指针。因为传递数组名作为参数并不意味着传递整个数组。它只是指向第一个元素的指针。
char [20]
会返回strtok
,因此期望char *
作为赋值的左值。