【问题标题】:assigning strings to a variable [duplicate]将字符串分配给变量[重复]
【发布时间】:2013-07-05 04:36:51
【问题描述】:

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

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

这两种数据类型有何不同以及为何不同?

【问题讨论】:

标签: c arrays string


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    仅仅使用数组名就可以让它指向它的第一个元素。所以传递数组名作为参数并不意味着传递整个数组。它只是指向第一个元素的指针。

    strtok 返回一个char *,因此期待一个char * 作为赋值的左值。

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多