问题标签 [strncpy]

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.

0 投票
3 回答
3042 浏览

c - strncpy 段错误

我一直无法让这部分代码工作。我正在尝试复制要复制的字符数组,以便计算有多少令牌可以动态分配并保存以检查环境变量。但是,当它尝试对原始字符串进行 strncpy 时,我会不断出现段错误。

我知道这与我如何复制传入的 str1 字符数组有关,但我无法从 gdb 中弄清楚。任何帮助是极大的赞赏

0 投票
1 回答
1127 浏览

c - strncpy() 字符串长度输出错误

我在strncpy()复制所需长度的额外字符时遇到问题。我需要将 10 个最高有效位从一个字符串复制到另一个字符串(均为char*格式)。

较大变量的大小在直觉上并不重要,较小的变量仅在明显小于我需要的值时才会影响输出(我也不知道为什么会这样)。

my 中的 n 值strncpy()可能是导致问题的原因,但我不知道它为什么会这样。如果我没记错的话,目标字符串的长度 n 应该比数据长 1,以说明最后的空字符。

我的字符串根本没有这样的行为。设置n11,我收到以下输出:

我想它只会复制 10 个字符,最后一个为空字符。增加n会产生相同的结果。

将 n 减少到 10 揭示了问题的核心:

我不知道它为什么会这样做,但是随着 n 的减小,它会继续这样做,直到n小得多(大约 8)。

这些是我的代码的相关行:

lv1Index此之前未触及的位置,并且 binAddr 直接预先显示(在给定的输出中)。

添加的字符总是@,所以我不相信它是lv1Index预初始化的垃圾。

0 投票
7 回答
7437 浏览

c++ - strncpy 等价于 std::string?

C++ 标准库中是否有与strncpy完全等价的功能?我的意思是一个函数,它将一个字符串从一个缓冲区复制到另一个缓冲区,直到它到达终止 0?例如,当我必须解析来自不安全来源的字符串(例如 TCP 数据包)时,我可以在处理数据时执行长度检查。

我已经搜索了很多关于这个主题的内容,并且还发现了一些有趣的主题,但是所有这些人都对 std::string::assign 感到满意,它还能够将要复制的字符大小作为参数。我对这个函数的问题是,如果终止 null 已经被命中,它不会执行任何检查 - 它会认真对待给定的大小并将数据复制到memcpy将其复制到字符串的缓冲区中。这样,如果在应对时进行了这样的检查,则分配和复制的内存比必须完成的要多得多。 

这就是我目前解决此问题的方式,但我希望避免一些开销:

这段代码是我的 PE 二进制文件解析器的一部分(准确地说,是解析导出表的例程)。rva2sra将一个相对虚拟地址转换为一个 PE 段相对地址。ExportDirectory_t结构包含二进制文件导出名称的 RVA,它应该是一个以零结尾的字符串。但情况并非总是如此 - 如果有人愿意,它可以省略终止零,这会使我的程序运行到不属于该部分的内存中,最终会崩溃(在最好的情况下......)。

自己实现这样的功能不是什么大问题,但如果在 C++ 标准库中实现了这个功能,我会更喜欢它。

0 投票
3 回答
3936 浏览

arrays - 将 volatile 数组传递给 strncpy

在我的 ISR 中,我有一个从 USART 填充的缓冲区,因此我将缓冲区声明为 volatile:

好的,那里没有问题。我相信这是标准做法。

在 main() 中的某处,我需要复制该数组的一部分,因为该数组是一个循环缓冲区,并且将来某个时候会被删除:

哦,但这是不,不!我的编译器尽职尽责地告诉我:

传递“strncpy”的参数 2 从指针目标类型中丢弃“volatile”限定符

因为 strncpy 使 's2' 成为 const char *

我不认为我在做任何没有按照标准做法做的事情。我该如何正确地做到这一点?

0 投票
2 回答
2686 浏览

c - 从不同大小的整数转换为指针 [-Wint-to-pointer-cast]

好吧,我必须恢复以前在这里回答过的问题。由于其他原因,我进行了一些更改,现在我又遇到了问题。以下是相关细节:

使用演员表,我得到主题行中显示的错误。没有演员表,我得到:

传递“memcpy”的参数 2 使指针从整数而不进行强制转换

请注意,如果我改用 strncpy,也会发生同样的事情。所以我很难过。我以为我明白 memcpy 使用 void*。我究竟做错了什么?

0 投票
5 回答
10105 浏览

c - 遍历C字符串:获取字符串的最后一个单词

你如何得到一个字符串的最后一个单词,从 '\0' 换行符开始到最右边的空格?例如,我可以有这样的东西,其中 str 可以被分配一个字符串:

我怎么会变黄?

0 投票
5 回答
2855 浏览

c - strncpy 引入了有趣的角色

当我在我的机器上运行一些代码时,它的行为就像我期望的那样。

当我在同事身上运行它时,它行为不端。这就是发生的事情。

我有一个值为:

croc_data_0001.idx

当我strncpy对提供 18 作为长度的字符串执行 a 时,我复制的字符串的值为:

croc_data_0001.idx♂</p>

如果我执行以下操作

那么复制的字符串的值为:

croc_data_0001.idx

什么可能导致这个问题,为什么通过将最后一个字符设置为来解决它\0

0 投票
3 回答
265 浏览

c - strcpy() 创建错误

我有这个结构,我正在尝试使用以下代码对其进行初始化。尝试初始化“finger_print”时出现运行时错误

它有什么问题?

功能:

与 strncpy() 相同

0 投票
5 回答
642 浏览

c++ - 添加长度时出现strncpy char字符串问题

我在比较两个相同的 char 字符串时遇到问题:

如果我使用:

strcpy(string, "StringToCompare");

代替:

strncpy(string, "StringToCompare", 49);

它解决了这个问题,但我宁愿插入字符串的长度而不是它本身。

这里出了什么问题?我该如何解决这个问题?

0 投票
11 回答
183 浏览

c++ - 你能改变指针指向的大小吗

例如,如果一个指针指向一个字符数组,上面写着“你好,你好吗?” 而您只希望指针指向 Hello。我传入一个 char 指针,当我计算它时,它会读取整个数组。我尝试使用一个 for 循环来减小大小,该循环在遇到“”时会中断。但我没有运气弄清楚。有任何想法吗?