【问题标题】:Need help using the strsep function in c在 c 中使用 strsep 函数需要帮助
【发布时间】:2018-07-17 03:50:10
【问题描述】:
int main(int argc, char *argv[])    
 {
    char *line, buffer[1024];
    char *token, *setValue, *pointer;


    FILE *fp = fopen("file", "r");
    if(fp == NULL)
    {
        printf("File was unable to be opened.\n");

    }

     fgets(buffer,1024,fp);  
      printf("%s\n", buffer);
     while(fgets(buffer,1024,fp) != NULL)
  {
    strcpy(token, strsep(&buffer, ","));
    printf("%s\n", token);
  }



 return 0;
 }

我在理解 strsep 的工作原理时遇到了一些麻烦。我已经查找了它的教程,但是当我尝试不同的方法时,它总是无法编译。如果有人的话,将不胜感激帮助我理解了语法和它的工作方式。谢谢。

**EDIT: 'Buffer' 包含“I,was,in,the,school”

****EDIT x2:我正在尝试解析 csv 文件,并以我在桌面上创建的基本“缓冲区”为例。我想用相应的逗号分隔不同的单词。

【问题讨论】:

  • 你到底想做什么?请具体说明您的问题。
  • 如果它不能编译它会给你一个原因(错误代码/消息或某种类型)你得到的是什么?
  • @user3386109 我更改了它,但我收到错误消息:'[警告] 传递 strcpy 的参数 2 使指针从整数而不进行强制转换
  • @stevenByrne,它得到相同的错误消息''[警告] 传递 strcpy 的参数 2 使指针从整数而不进行强制转换'

标签: c string strsep


【解决方案1】:

关于:

strcpy(token, strsep(&buffer, ","));

变量token 只是一个指针,它没有被设置为指向应用程序拥有的任何内存。因此,它将包含变量所在位置的堆栈上的垃圾。

结果是未定义的行为,它可能导致段错误事件。

建议将token声明为

char token[ 1024 ];

所以它足够大以容纳最大长度的字符串(即buffer[]的长度

因为上面还不够糟糕:

发布的代码缺少语句:#include <string.h>,以便暴露函数strsep()的原型,因此编译器将假设参数和返回值是int而不是它们的实际类型。

发布的代码也缺少语句:#include <stdio.h>,因此函数的参数和返回类型:fopen()、fgets()、printf()and even the struct type forFILEare assumed to beint` 而不是它们的实际类型.

【讨论】:

    猜你喜欢
    • 2011-07-20
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 2014-07-24
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多