问题标签 [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 回答
1928 浏览

c - strncopy 复制多于 n 个字符

我得到了一个程序的外壳,并且必须填写一些功能。

我有两个自动创建并传递给我必须定义的函数的结构。

假设我必须定义这个函数foo并这样创建它:

当调用该函数时,它会打印出ddddddddddddddddddddôÑ@<úHn½*Ìå«*¤ú¤F«*. 除非我错了,它不应该只能容纳20个字符吗?我实际上并没有创建msg.

如果我复制msg.datapkt.payload.

message.data 的打印结果与以前相同,但 packet.payload 的打印结果相同eeeeeeeeeeeeeeeeeeee<úeeeeeeeeeeeeeeeeeeee²+!@<úHn½*Ìå«*¤ú¤F«*。为什么超过20个字符?

这是我第一次使用 C,如果这很明显,请原谅我,但我什至无法触及作业的核心,因为我在语言方面遇到了问题。

0 投票
3 回答
1829 浏览

c - strncpy 问题(C 语言)

我在使用 strncpy 时遇到了困难。我正在尝试将 8 个字符的字符串一分为二(一个子字符串中的前 6 个字符,然后在另一个子字符串中剩余 2 个字符)。为了说明特别困难,我将代码简化为以下内容:

提示用户输入。假设他们输入“12345678”。那么程序的输出是:

我期望的输出如下:

我不明白 strncpy 似乎如何将数字附加到字符串......显然我对 strncpy 的理解不够好,但谁能向我解释发生了什么?

0 投票
6 回答
42783 浏览

c - Difference between strncpy and memcpy?

How can I access s[7] in s?

I didn't observe any difference between strncpy and memcpy. If I want to print the output s, along with s[7] (like qwertyA), what are the changes I have to made in the following code:

Output:

0 投票
6 回答
908 浏览

c++ - strncpy 文档问题

在以下关于strncpyhttp ://www.cplusplus.com/reference/clibrary/cstring/strncpy/ ,它提到以下内容:

没有空字符隐式附加到目标的末尾,因此只有当源中 C 字符串的长度小于 num 时,目标才会以空字符结尾。

这句话是什么意思?

0 投票
3 回答
27631 浏览

python - 将零填充字节转换为 UTF-8 字符串

我正在解压几个包含C 中's'类型字段的结构。这些字段包含由strncpyC 代码处理的零填充 UTF-8 字符串(请注意此函数的残留行为)。如果我解码字节,我会得到一个结尾有很多NUL字符的 unicode 字符串。

我的印象是尾随零字节是 UTF-8 的一部分,并且会自动删除。

删除零字节的正确方法是什么?

0 投票
1 回答
114 浏览

native - 为什么原生程序直接执行时运行良好,但通过 Condor 提交时因 seg 错误而失败

我有一个第三方库,我正在尝试将其合并到模拟中。我们有静态库 (.a),以及它的所有运行时依赖项(共享对象)。我创建了一个与库链接的非常简单的应用程序(用 C 语言)。它所做的只是调用作为第三方库 API 一部分的初始化函数,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交到我们的 Condor 网格,它会因 strncpy (libc.so.6) 上的段错误而失败。我已经强制 condor 只在特定机器上运行可执行文件,如果我直接在该机器上运行它,它工作正常。

我主要是一名 Java 程序员......本机编码经验有限。我对 nm、ldd、catchsegv 等工具非常熟悉,以至于我可以运行它们。我真的不知道从哪里开始寻找问题。

我已经直接在执行机器上运行 ldd,并通过 condor 提交的脚本以及我的可执行文件。ldd 在两种情况下都报告相同的文件。

我不明白直接运行它是如何工作的,但它会失败由秃鹰运行。最终执行程序的进程 condor_startd 是一个以 root 身份启动的进程,并将其有效 uid 更改为提交者。也许这与它有关?

0 投票
1 回答
93 浏览

c - 字符串长度为 76 的问题

我在这里不知所措。将在短时间内发布我的代码......只是它太长了,无法提取部分“令人不安”的代码。将在这里解释我的问题:我将字符串(文件或目录的路径)存储在结构数组中,{ char *path; size_t path_len}其中path字符串path_en及其长度。插入时path_len为 76。从数组中提取时strncpy,字符串长度变为 78,甚至strlen数组中的简单字符串为 77。

原始字符串长度小于 77 的所有其他情况都可以正常工作。

我很困惑。

0 投票
6 回答
34197 浏览

c - strncpy 或 strlcpy 在我的情况下

当我想复制src_str到时我应该使用什么dst_arr,为什么?

PS:读了很多关于好坏的东西后,我的头比我的电脑磁盘旋转更快。strncpystrlcpy

注意:我知道strlcpy并非随处可用。这不是这里的问题。

0 投票
6 回答
6286 浏览

c++ - UTF8 感知 strncpy

我很难相信我是第一个遇到这个问题的人,但是搜索了很长一段时间并没有找到解决方案。

我想使用 strncpy 但让它支持 UTF8,因此它不会部分地将 utf8 字符写入目标字符串。

否则,您永远无法确定生成的字符串是有效的 UTF8,即使您知道源是(当源字符串大于最大长度时)。

验证结果字符串可以工作,但如果要经常调用它,最好有一个 strncpy 函数来检查它。

glib 有g_utf8_strncpy,但这会复制一定数量的 unicode 字符,而我正在寻找一个受字节长度限制的复制函数。

需要明确的是,“utf8 感知”是指它不应超过目标缓冲区的限制,并且绝不能仅复制 utf-8 字符的一部分。(给定有效的 utf-8 输入决不能导致无效的 utf-8 输出)。


笔记:

一些回复指出,strncpy所有字节都为空,并且它不会确保零终止,回想起来我应该要求一个 utf8 感知strlcpy,但是当时我不知道这个函数的存在。

0 投票
2 回答
8960 浏览

c - strncpy 覆盖现有字符串

我创建了一个将数字转换为罗马数字的函数。我知道转换本身的逻辑是正确的,但是,每次调用 strncpy 时,它都会覆盖“rom”的先前值。我什至尝试背靠背调用它,但它只返回了后者。

这是代码中的一个片段:

也许使用 calloc 是问题的一部分,但我尝试使用 malloc 并且它给了我相同的结果。