问题标签 [strsep]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 使用 fscanf 读取可变数量的整数
我有超过 100,000 个以下格式的 csv 文件:
我需要的只是字段 10 和字段 17,字段 10 是计数器,表示从字段 17 开始存储了多少整数,即我需要的是:
需要读取的最大整数数是 28。我可以通过 C++ 中的 Getline 轻松实现这一点,但是,根据我以前的经验,因为我需要处理超过 100,000 个这样的文件,每个文件可能有 300,000~400,000 行这样的行。因此,使用 Getline 读取数据并构建向量> 对我来说可能存在严重的性能问题。我尝试使用 fscanf 来实现这一点:
但是,这将多次调用 fscanf 并且还可能产生性能问题。有没有办法在 fscanf 的 1 次调用中读取可变数量的整数?或者我需要读入一个字符串然后 strsep/stoi 它?与 fscanf 相比,从性能角度来看,哪个更好?
c - 使用 strsep() 读取文本文件时出现空行/字符
我正在学习 C 并且作为一种练习,我正在尝试读取每行中具有不同数字集的文件,并打印(或保存到不同的文件)每行的每个数字(也作为字符串)。
你可以在这里看到代码:
当我在打印/写入时删除 '\n' 字符时,所有数字都会一个接一个地打印出来。我期望。问题是当我包含 \n 字符时,输出包含一些空行。我包括一个输入和输出文件的例子:
输入:
输出:
如您所见,当原始文件有换行符时,输出包含一个空行,但如果我删除 \n,它会打印/写入一个接一个的数字而没有空格:
如果 \n 是显式分隔符,则插入什么字符?
c - strsep 如何在 C 中工作?
我正在创建一个程序,该程序在启动时接受输入命令和scanf的一些参数,并使用这些参数调用execvp 。我正在用strsep做这个。我将字符串存储在一个数组(char *)中,然后我想将它拆分并将令牌存储在一个新数组中(这次它是一个数组 [],所以我可以将它与 execvp 一起使用)。用scanf保存的参数应该是终端的命令(如“ls ”和“-l” ecc,“pwd” ......但是变量保存在PATH中),因此它们用“”分隔。
这是一个示例,仅用于指定将是哪种输入。我将单独执行 execvp,我需要帮助将字符串拆分为标记。这是代码:
调用strsep需要第 5 行和第 6 行,dest[10]中的 10是符号。
第 7 行将输入存储在 st。
第 9 行应该拆分为 " " 并将命令和参数存储在dest[I]中(我将传递给 execvp)。
第 11 行打印 dest 存储的内容。
这是可悲的输出:
我不明白 strsep 是如何工作的,有人可以帮助我吗?
c - strtok_r 保存状态行为
正确的使用strtok_r
方法如下:
当试图检查实际存储的内容时save
,我发现它只是未解析字符串的其余部分。所以我试图让第二个调用看起来像第一个,并编写了一个包装器,如下所示。
这可以像下面这样使用,它不那么冗长。我们不必区分第一次呼叫和休息。
这种方法有什么缺点吗?我是否导致任何未定义的行为?我尝试了一些极端情况,两种方法的工作方式相似。
在线编译器:https ://wandbox.org/permlink/rkGiwXOUTzqrbMpP
PS 为简洁起见忽略内存泄漏。
更新
已经存在一个与我的as_tokens
: strsep几乎相似的函数。在有连续分隔符的情况下有所不同。strsep
返回一个空字符串,而as_tokens
(即 strtok_r)将它们视为一个。
c - 为什么 strsep() 不适用于指向堆栈的指针?
strsep
使用该函数查找字符串的第一个单词似乎存在指针兼容性问题。到目前为止,我一直认为char *s
并且char s[]
完全可以互换。但似乎他们不是。我在堆栈上使用数组的程序失败并显示以下消息:
我不明白这个问题。使用的程序malloc
有效。
这有效:
这不会:
有什么问题?(对不起strcpy
)。为什么函数指针指向堆栈或堆很重要?我理解为什么您不能访问二进制/文本段中的字符串,但是堆栈有什么问题?
c - 仅在使用 clang 10 编译时 strsep 后的段错误
我正在编写一个解析器(用于 NMEA 句子),它使用 strsep 将字符串拆分为逗号。使用 clang(Apple LLVM 版本 10.0.1)编译时,在拆分具有偶数个标记的字符串时代码会出现段错误。在 Linux 上使用 clang(版本 7.0.1)或 gcc(9.1.1)编译时,代码可以正常工作。
显示该问题的代码的精简版本如下:
段错误发生在 line 上if (!strcasecmp(args[0] + 1, nmea_parsers[i].type)) {
,对 args 的索引操作尝试遵循空指针。
通过手动编辑程序集或添加printf("")
对函数中任何位置的调用来增加堆栈的大小,使其不再出现段错误,就像使args
数组更大(例如,在 中添加一个num_args
)。
总之,以下任何一项都可以防止段错误:
- 使用 clang 10 以外的编译器
- 修改程序集以使动态分配之前的堆栈大小为 80 字节或更多(编译为 64)
- 使用奇数的输入字符串标记
- 分配args
为具有正确数量的标记(或更多)的固定长度数组
- 分配args
为具有至少num_args + 1
元素的可变长度数组
请注意,在 Linux 上使用 clang 7 编译时,动态分配之前的堆栈大小仍然是 64 字节,但代码没有段错误。
我希望有人能够解释为什么会发生这种情况,如果有什么方法可以让这个代码用 clang 10 正确编译。
c - 使用 Clang 和 MinGW 获取错误“未定义对‘strsep’的引用”
以下是相关代码:
我正在使用带有 minGW 和 Clang 的代码块。
我知道我的一些代码目前没有做它应该做的事情,但我很确定它至少应该编译。我也收到警告:“函数‘strsep’的隐式声明”。
c - 尝试解析 excel 样式 .CSV 文件时出现分段错误 [C 编程]
在本周的大部分时间里,我一直被困在这个项目上,而我一直在努力解决语法错误。
该项目的要点是通读标题并在某个列处停止并找到某些特征,例如该列的最小值、最大值和平均值。但是,我在为这项工作分配内存时遇到了困难。到目前为止,我一直无法进一步完善我的代码,因为我不断收到一个错误标签Segmentation Fault: 11
。
粗体部分是我将问题缩小到的部分。我知道存在内存问题,但我不明白为什么 fgets 没有从函数内读取文件的第一行。该文件也不返回 NULL 并且能够被访问。动态数组是一种选择,但我是初学者,对它们非常不熟悉。
excel 文件看起来像这样以供参考在此处输入图像描述
c - 如何正确使用 strsep() 解析数组?
我正在尝试实现一个函数,该函数接受一个字符串来解析和分隔字符串作为输入,然后返回一个包含这些解析元素的 char 数组,如果两个分隔符相邻,则包括空字符。
以下是我当前的代码:
但是,在测试中我发现这只会返回一个 NULL 字符串,我不知道为什么。没有产生警告或错误,我已经查阅了手册页。
c - C - Strsep() 返回 0 和负值
我正在一个使用 GPS 数据的项目中工作。我正在尝试获取所有数据,但我遇到了很多问题。我收到的信息是:
我决定使用 strsep,因为它适用于 GPS 数据的空白字段。使用 strsep 如果它是肯定的,我可以正确获取数据。在我的情况下,纬度是负数,使用 strsep 我得到一个 0 值。
我为获取所需数据所做的代码是:
如果您有任何建议,欢迎。