c - 在导致段错误的字符串文字上使用 strtol

标签 c linux strtok strtol

我有一个通过 getline() 获得的字符串(更准确地说,我使用循环和 getline 逐行读取文件)

假设该行是 12|34|

然后我使用 strtok() 通过 substr = strtok(line, "|"); 将其缩减 并将它们存储到一个带有循环的字符串数组中,part[index] = substr;

所以这里的part[0]应该是“12”,part[0]是“34” 我想使用 strtol,但我已经检查过它不能用于字符串文字,然后我尝试使用以下代码。

char *temp = strdup(part[1]);
char **ptr;
long ret = strtol(temp, ptr, 10);
printf("%x\n", ret);

当我阅读第二行时,它会导致段错误。我怎样才能真正使用strtol将字符串转换为整数

最佳答案

问题是 ptr 没有初始化。因此,当 strtol 尝试写入地址 ptr 时,它会崩溃(或未定义的行为)。

您必须传递一个指针的有效地址来存储最后一个未处理的字符,例如:

char *ptr;
long ret = strtol(temp, &ptr, 10);

&ptr有效,指向ptr

的auto变量存放位置

关于c - 在导致段错误的字符串文字上使用 strtol,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53116805/

相关文章:

Char* 从 char 数组中解析错误

c strcmp() 与字符串数组

mysql - 在 Linux 上使用 C 连接到 lampp mysql 数据库

c - Strtok 问题 C(EOF 字符?)

c - 避免在 C 程序中使用 main(入口点)

c - C 中 switch 的退出情况

c - 从 stdin c 读取文件名

c - 我误解了 win32(也许还有 libc)strtok()

java - 如何在 linux 终端的 shell 脚本上运行 jar 文件?

linux - 等待第二个脚本触发直到第二个脚本的所有后台并行进程完成?