c - 从 C 中的 char 中提取文本

标签 c string strtok

<分区>

我是初学者 C 程序员。最近我一直在尝试练习在 C 中使用字符串函数。

因此,我编写了以下程序:

消息检测器.c

#include <stdio.h>
#include <string.h>

int main(void) 
{
    char a[100] = "Alex:HeyGoodMorning!:1911hrs:0:1012:2017:::";
    char *p = strtok(a,":");
    char n[20];

    int i = 1;

    while(p != NULL) {
        strcpy(n,p);
        p = strtok(NULL,":"); //limit to characters before semi-colon
        i++;

        if (i = 2) { //after 2 occurrences of the semi-colon. print a string
            printf("%s\n",n);
            break;
        }
    }

    return 0;
}

我的程序输出如下:

Alex

但是,我希望程序能够输出

HeyGoodMorning!

我应该对上面的程序做哪些修改?非常感谢您的帮助

最佳答案

用 0 初始化变量 i 并在这种情况下使用比较而不是赋值

int i = 0;
//...
if(i == 2){//

考虑到 strcpy 的第一次调用是多余的。

事实上,您可以在没有循环的情况下执行相同的操作。例如

char a[100] = "Alex:HeyGoodMorning!:1911hrs:0:1012:2017:::";
char *p;

if ((p = strtok(a, ":")) && (p = strtok(NULL, ":")))
{
    puts(p);
}

关于c - 从 C 中的 char 中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48076183/

相关文章:

C 函数定义和 extern 关键字

c++ - std::string 的对象真的可以 move 吗?

c - strtok 不返回任何值

c++ - 调用 strtok() 时发生访问冲突; C++

c - "cannot convert to a pointer type"通过指针访问结构

c - 如何在 linux C 内联汇编中使用宏

c - 如何修改 C 程序以便 gprof 可以分析它?

c# - 为什么在字节数组和字符串之间转换时,Environment.NewLine 不起作用

java - 解析内部 <p> 标签

c - 使用 fgets()、strtok()、strcpy() 的 C 语言中的段错误