芒果没有派 2023-03-05 14:35 采纳率: 25%
浏览 36
已结题

中间都隔有不定量的空格,如何输出第二列的字符串,用fgets,popen和strstr函数

有五列字符串,中间都隔有不定量的空格,如何输出第二列的字符串,用fgets,popen和strstr函数

  • 写回答

1条回答 默认 最新

  • 陈书予 2023年6月份城市(北京)之星TOP 1 2023-03-05 19:45
    关注
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_LEN 1024
    
    int main() {
        FILE *fp;
        char buf[MAX_LEN];
        char *token;
        
        fp = popen("command", "r"); //替换"command"为你要执行的命令,例如"ls -l"
        if (fp == NULL) {
            printf("Error: Failed to execute command\n");
            return 1;
        }
    
        while (fgets(buf, MAX_LEN, fp) != NULL) {
            token = strtok(buf, " "); //使用空格作为分隔符
            if (token != NULL) {
                token = strtok(NULL, " "); //取出第二列
                if (token != NULL) {
                    printf("%s\n", token);
                }
            }
        }
    
        pclose(fp);
        return 0;
    }
    

    解释一下代码:

    1. 首先,使用popen函数执行一个命令,并返回一个文件指针,该文件指针指向执行命令的标准输出流。例如,你可以替换"command"为"ls -l",这样就可以执行ls -l命令并返回结果。

    2. 接着,在循环中使用fgets函数读取fp指向的文件流中的一行文本,存储在buf中。

    3. 使用strtok函数对buf进行分割,使用空格作为分隔符。第一次调用strtok会返回第一个被分割出来的字符串,即第一列字符串;第二次调用strtok会返回第二个被分割出来的字符串,即第二列字符串。

    4. 如果第二列字符串不为空,则使用printf函数输出它。

    5. 最后,使用pclose函数关闭文件指针,结束程序。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 3月5日