【问题标题】:How do I tokenize a char array input into a char and a string?如何将字符数组输入标记为字符和字符串?
【发布时间】:2019-09-20 14:39:45
【问题描述】:

我正在尝试要求用户输入 3 个字符。我想将第一个字符和最后两个字符分开。因此,如果“A13”是用户输入,我想将“A”存储在单独的字符中,将“13”存储在单独的字符 [] 中。

//initializations
char seatName[4], seatRowName, seatNumber[3];

printf("\n\nPick a seat (Row Seat) ");
scanf("%s", seatName);
seatRowName=seatName[0];
seatNumber=strchr(seatName, seatRowName);
//I get the "error: incompatible types in assignment" on the above line

示例输出:

选座(Row Seat):A13
//seatRowName = A,seatNumber=13

【问题讨论】:

  • 你已经拥有了你需要的东西。 *seatName'A'seatName + 1"13"
  • 使用 field-width 修饰符 "%3s" 来保护 seatName 的数组边界在意外输入附加键时不会溢出——否则调用 未定义的行为。 (此外,--不要吝啬缓冲区大小32 而不是4 将是一个更现实的最小值)

标签: c string.h strchr


【解决方案1】:

使用下面的代码:

seatRowName=seatName[0];
strcpy(seatNumber, &seatName[1]);  // strncpy if you want to be safe

如果你永远不会改变seatName,你也可以使用const char *seatNumber = &seatName[1];


为什么有效:

             +0  +1  +2  +3
            +---+---+---+---+
   seatName | A | 1 | 3 | \0|
            +---+---+---+---+
             [0] [1] [2] [3]

在内存中seatName 将内容存储在连续空间中。即使对于像A3 这样的输入,这种方法也可以正常工作。您应该提供其他健全性检查以供输入。

seatNumber=strchr(seatName, seatRowName);

我在上面一行得到“错误:分配中不兼容的类型”

strchr 返回char * 并且seatNumber 的类型是char [3]。因为 RHS 和 LHS 的类型不同,所以您会遇到上述错误。与许多流行语言不同,C 不允许这样做。

将苹果分配给橙子几乎总是不正确的。 strcpy(A, B); 而不是 A = B 在这种情况下会起作用。

【讨论】:

    猜你喜欢
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2015-10-22
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多