问题标签 [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 - strncopy 复制多于 n 个字符
我得到了一个程序的外壳,并且必须填写一些功能。
我有两个自动创建并传递给我必须定义的函数的结构。
假设我必须定义这个函数foo
并这样创建它:
当调用该函数时,它会打印出ddddddddddddddddddddôÑ@<úHn½*Ìå«*¤ú¤F«*
. 除非我错了,它不应该只能容纳20个字符吗?我实际上并没有创建msg
.
如果我复制msg.data
到pkt.payload
.
message.data 的打印结果与以前相同,但 packet.payload 的打印结果相同eeeeeeeeeeeeeeeeeeee<úeeeeeeeeeeeeeeeeeeee²+!@<úHn½*Ìå«*¤ú¤F«*
。为什么超过20个字符?
这是我第一次使用 C,如果这很明显,请原谅我,但我什至无法触及作业的核心,因为我在语言方面遇到了问题。
c - strncpy 问题(C 语言)
我在使用 strncpy 时遇到了困难。我正在尝试将 8 个字符的字符串一分为二(一个子字符串中的前 6 个字符,然后在另一个子字符串中剩余 2 个字符)。为了说明特别困难,我将代码简化为以下内容:
提示用户输入。假设他们输入“12345678”。那么程序的输出是:
我期望的输出如下:
我不明白 strncpy 似乎如何将数字附加到字符串......显然我对 strncpy 的理解不够好,但谁能向我解释发生了什么?
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:
c++ - strncpy 文档问题
在以下关于strncpy
:http ://www.cplusplus.com/reference/clibrary/cstring/strncpy/ ,它提到以下内容:
没有空字符隐式附加到目标的末尾,因此只有当源中 C 字符串的长度小于 num 时,目标才会以空字符结尾。
这句话是什么意思?
native - 为什么原生程序直接执行时运行良好,但通过 Condor 提交时因 seg 错误而失败
我有一个第三方库,我正在尝试将其合并到模拟中。我们有静态库 (.a),以及它的所有运行时依赖项(共享对象)。我创建了一个与库链接的非常简单的应用程序(用 C 语言)。它所做的只是调用作为第三方库 API 一部分的初始化函数,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交到我们的 Condor 网格,它会因 strncpy (libc.so.6) 上的段错误而失败。我已经强制 condor 只在特定机器上运行可执行文件,如果我直接在该机器上运行它,它工作正常。
我主要是一名 Java 程序员......本机编码经验有限。我对 nm、ldd、catchsegv 等工具非常熟悉,以至于我可以运行它们。我真的不知道从哪里开始寻找问题。
我已经直接在执行机器上运行 ldd,并通过 condor 提交的脚本以及我的可执行文件。ldd 在两种情况下都报告相同的文件。
我不明白直接运行它是如何工作的,但它会失败由秃鹰运行。最终执行程序的进程 condor_startd 是一个以 root 身份启动的进程,并将其有效 uid 更改为提交者。也许这与它有关?
c - 字符串长度为 76 的问题
我在这里不知所措。将在短时间内发布我的代码......只是它太长了,无法提取部分“令人不安”的代码。将在这里解释我的问题:我将字符串(文件或目录的路径)存储在结构数组中,{ char *path; size_t path_len}
其中path
字符串path_en
及其长度。插入时path_len
为 76。从数组中提取时strncpy
,字符串长度变为 78,甚至strlen
数组中的简单字符串为 77。
原始字符串长度小于 77 的所有其他情况都可以正常工作。
我很困惑。
c - strncpy 或 strlcpy 在我的情况下
当我想复制src_str
到时我应该使用什么dst_arr
,为什么?
PS:读了很多关于好坏的东西后,我的头比我的电脑磁盘旋转得更快。strncpy
strlcpy
注意:我知道strlcpy
并非随处可用。这不是这里的问题。
c++ - UTF8 感知 strncpy
我很难相信我是第一个遇到这个问题的人,但是搜索了很长一段时间并没有找到解决方案。
我想使用 strncpy 但让它支持 UTF8,因此它不会部分地将 utf8 字符写入目标字符串。
否则,您永远无法确定生成的字符串是有效的 UTF8,即使您知道源是(当源字符串大于最大长度时)。
验证结果字符串可以工作,但如果要经常调用它,最好有一个 strncpy 函数来检查它。
glib 有g_utf8_strncpy
,但这会复制一定数量的 unicode 字符,而我正在寻找一个受字节长度限制的复制函数。
需要明确的是,“utf8 感知”是指它不应超过目标缓冲区的限制,并且绝不能仅复制 utf-8 字符的一部分。(给定有效的 utf-8 输入决不能导致无效的 utf-8 输出)。
笔记:
一些回复指出,strncpy
所有字节都为空,并且它不会确保零终止,回想起来我应该要求一个 utf8 感知strlcpy
,但是当时我不知道这个函数的存在。
c - strncpy 覆盖现有字符串
我创建了一个将数字转换为罗马数字的函数。我知道转换本身的逻辑是正确的,但是,每次调用 strncpy 时,它都会覆盖“rom”的先前值。我什至尝试背靠背调用它,但它只返回了后者。
这是代码中的一个片段:
也许使用 calloc 是问题的一部分,但我尝试使用 malloc 并且它给了我相同的结果。