-3

我想知道为什么第一个代码有效,而第二个无效。

#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 *'不兼容。

这两种数据类型如何以及为什么不同?

4

2 回答 2

2

数组不是指针。您正在尝试将指针分配给数组。请参阅有关数组和指针的C 常见问题解答条目。

于 2013-07-05T04:44:48.263 回答
0

'char [20]' 和类型 'char *' 不兼容。char *可以持有一个指向的指针char意味着它可以存储char不简单的地址charchar [20]是一个 20 个字符的数组(不是字符地址)。

仅使用数组的名称使其指向其第一个元素。因此,将数组名称作为参数传递并不意味着传递整个数组。它只是指向第一个元素的指针。

strtok返回 achar *所以期望 achar *作为赋值的左值。

于 2013-07-05T04:53:21.647 回答