将字符串分配给变量

时间:2013-07-05 04:36:51

标签: c arrays string

我想知道为什么第一个代码有效但第二个代码没有。

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

两种数据类型的不同之处和原因是什么?

2 个答案:

答案 0 :(得分:2)

数组不是指针。您正在尝试分配指向数组的指针。请参阅有关数组和指针的this C FAQ条目。

答案 1 :(得分:0)

'char [20]'和类型'char *'是不兼容的。char *可以指向char的指针,表示它可以存储char的地址而非简单{{1} }。char是一个20个字符的数组(不是字符的地址)。

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

char [20]会返回strtok,因此期望char *作为赋值的左值。