c - strtok 未按预期工作

标签 c strtok

我尝试编写一个函数,该函数获取指向字符数组的指针,从用户读取字符串并删除字符串开头的所有空格,直到出现第一个不是字符串的字符。最后返回开头不带空格的字符串副本。

例如,

对于输入abcd,函数应返回指向字符串abcd的指针。

对于输入123 123,函数应返回指向字符串123 123的指针。

函数如下所示,

void read_RemoveSpace(char * str)/**read the rest of string**/
{
    char tempRead[30];
    fgets(tempRead,30,stdin);
    char *ptr = strtok(tempRead, " "); /**remove spaces between command and other data**/
    strcpy(str,ptr); /**copy the new string without the spaces.**/
}

但由于某种原因,函数 strtok() 没有按预期工作。

如果输入:

   123 456

该函数仅返回不带空格的第一部分,而不返回字符串的其余部分,即它指向

123

有什么建议吗?

最佳答案

strtok 完全按预期工作。它将输入分解为字符串 123456

strtok (tempRead, " "); /* Returns 123 */
strtok (NULL, " "); /* Returns 456 */

我认为你可以使用更简单的解决方案:

int i = 0;
char tempRead[30];
...
while (tempRead[i] == ' ' && tempRead[i])
  i++;
strcpy(str,tempRead+i);

关于c - strtok 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030492/

相关文章:

c++ - 在 C++ 中读取前缀

c - 解释 SNMP GET REQUEST 消息的 OID 部分的十六进制

java - JVMT 异常监视器

c - 按子字符串拆分字符串

c - 在 C 中使用 strtok() 来换行具有多个分隔符的行

c - 将字符串拆分为标记

c - 给出了段错误,为什么? (C)

c - 如何从 Win32 API 获取打印机制造商和型号?

php - 从 php 调用 c

c - fgets 或 strtok 错误返回不需要的第三行