问题标签 [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.
c - strncpy 段错误
我一直无法让这部分代码工作。我正在尝试复制要复制的字符数组,以便计算有多少令牌可以动态分配并保存以检查环境变量。但是,当它尝试对原始字符串进行 strncpy 时,我会不断出现段错误。
我知道这与我如何复制传入的 str1 字符数组有关,但我无法从 gdb 中弄清楚。任何帮助是极大的赞赏
c - strncpy() 字符串长度输出错误
我在strncpy()
复制所需长度的额外字符时遇到问题。我需要将 10 个最高有效位从一个字符串复制到另一个字符串(均为char*
格式)。
较大变量的大小在直觉上并不重要,较小的变量仅在明显小于我需要的值时才会影响输出(我也不知道为什么会这样)。
my 中的 n 值strncpy()
可能是导致问题的原因,但我不知道它为什么会这样。如果我没记错的话,目标字符串的长度 n 应该比数据长 1,以说明最后的空字符。
我的字符串根本没有这样的行为。设置n
为11
,我收到以下输出:
我想它只会复制 10 个字符,最后一个为空字符。增加n
会产生相同的结果。
将 n 减少到 10 揭示了问题的核心:
我不知道它为什么会这样做,但是随着 n 的减小,它会继续这样做,直到n
小得多(大约 8)。
这些是我的代码的相关行:
在lv1Index
此之前未触及的位置,并且 binAddr 直接预先显示(在给定的输出中)。
添加的字符总是@
,所以我不相信它是lv1Index
预初始化的垃圾。
c++ - strncpy 等价于 std::string?
C++ 标准库中是否有与strncpy完全等价的功能?我的意思是一个函数,它将一个字符串从一个缓冲区复制到另一个缓冲区,直到它到达终止 0?例如,当我必须解析来自不安全来源的字符串(例如 TCP 数据包)时,我可以在处理数据时执行长度检查。
我已经搜索了很多关于这个主题的内容,并且还发现了一些有趣的主题,但是所有这些人都对 std::string::assign 感到满意,它还能够将要复制的字符大小作为参数。我对这个函数的问题是,如果终止 null 已经被命中,它不会执行任何检查 - 它会认真对待给定的大小并将数据复制到memcpy将其复制到字符串的缓冲区中。这样,如果在应对时进行了这样的检查,则分配和复制的内存比必须完成的要多得多。
这就是我目前解决此问题的方式,但我希望避免一些开销:
这段代码是我的 PE 二进制文件解析器的一部分(准确地说,是解析导出表的例程)。rva2sra将一个相对虚拟地址转换为一个 PE 段相对地址。ExportDirectory_t结构包含二进制文件导出名称的 RVA,它应该是一个以零结尾的字符串。但情况并非总是如此 - 如果有人愿意,它可以省略终止零,这会使我的程序运行到不属于该部分的内存中,最终会崩溃(在最好的情况下......)。
自己实现这样的功能不是什么大问题,但如果在 C++ 标准库中实现了这个功能,我会更喜欢它。
arrays - 将 volatile 数组传递给 strncpy
在我的 ISR 中,我有一个从 USART 填充的缓冲区,因此我将缓冲区声明为 volatile:
好的,那里没有问题。我相信这是标准做法。
在 main() 中的某处,我需要复制该数组的一部分,因为该数组是一个循环缓冲区,并且将来某个时候会被删除:
哦,但这是不,不!我的编译器尽职尽责地告诉我:
传递“strncpy”的参数 2 从指针目标类型中丢弃“volatile”限定符
因为 strncpy 使 's2' 成为 const char *
我不认为我在做任何没有按照标准做法做的事情。我该如何正确地做到这一点?
c - 从不同大小的整数转换为指针 [-Wint-to-pointer-cast]
好吧,我必须恢复以前在这里回答过的问题。由于其他原因,我进行了一些更改,现在我又遇到了问题。以下是相关细节:
使用演员表,我得到主题行中显示的错误。没有演员表,我得到:
传递“memcpy”的参数 2 使指针从整数而不进行强制转换
请注意,如果我改用 strncpy,也会发生同样的事情。所以我很难过。我以为我明白 memcpy 使用 void*。我究竟做错了什么?
c - 遍历C字符串:获取字符串的最后一个单词
你如何得到一个字符串的最后一个单词,从 '\0' 换行符开始到最右边的空格?例如,我可以有这样的东西,其中 str 可以被分配一个字符串:
我怎么会变黄?
c - strncpy 引入了有趣的角色
当我在我的机器上运行一些代码时,它的行为就像我期望的那样。
当我在同事身上运行它时,它行为不端。这就是发生的事情。
我有一个值为:
croc_data_0001.idx
当我strncpy
对提供 18 作为长度的字符串执行 a 时,我复制的字符串的值为:
croc_data_0001.idx♂</p>
如果我执行以下操作
那么复制的字符串的值为:
croc_data_0001.idx
什么可能导致这个问题,为什么通过将最后一个字符设置为来解决它\0
?
c - strcpy() 创建错误
我有这个结构,我正在尝试使用以下代码对其进行初始化。尝试初始化“finger_print”时出现运行时错误
它有什么问题?
功能:
与 strncpy() 相同
c++ - 添加长度时出现strncpy char字符串问题
我在比较两个相同的 char 字符串时遇到问题:
如果我使用:
strcpy(string, "StringToCompare");
代替:
strncpy(string, "StringToCompare", 49);
它解决了这个问题,但我宁愿插入字符串的长度而不是它本身。
这里出了什么问题?我该如何解决这个问题?
c++ - 你能改变指针指向的大小吗
例如,如果一个指针指向一个字符数组,上面写着“你好,你好吗?” 而您只希望指针指向 Hello。我传入一个 char 指针,当我计算它时,它会读取整个数组。我尝试使用一个 for 循环来减小大小,该循环在遇到“”时会中断。但我没有运气弄清楚。有任何想法吗?