问题标签 [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++ - 如何快速复制 std::string 内容?
我已经阅读了一些 相关的 问题memcpy
,但没有关于和之间的速度比较strncpy
。
您建议如何跟踪关键部分中的字符串内容?
- 避免动态内存分配
- 代码的优雅和可读/可理解(几行代码)
- 快速处理(指令少,防止分支未命中)
- 能够被编译器优化(或已经使用优化指令的实现)
我在考虑c函数:
/li>memcpy
需要计算最小长度(参见coliru.stacked-crooked.com上的片段)- /li>
std::string::copy
正如dyp的评论所建议的......还有其他想法吗?
可以执行基准测试,但它应该基于多个编译器/版本、不同的标志集和不同的硬件/操作系统。我更喜欢基于您的反馈/背景/专业知识或数学知识的答案......
由于这是一个一般性问题,搜索相同相关问题的人会喜欢一般性答案,而不是我自己当前的具体案例。
供您参考,一个线程需要在文件中写入一些std::string
内容,以便另一个线程可以更改它们的内容。我无法更改此其他线程,并且此其他线程非常忙。如果我不锁定(互斥/自旋锁)字符串副本,我有时会遇到一些问题。因此,我想快速复制这些std::string
并将它们写在锁定部分之后。
c - 用零填充 C-Array,然后将数据复制到其中
这是使用套接字进行网络通信的 FTP 客户端应用程序的一部分。在向 FTP 服务器发送命令之前,我想将命令缓冲区初始化为零 - 没有机会将新命令与可能位于缓冲区末尾的任何旧字符混合(在新命令之后和'\0'
.
编辑:以下是上述函数的调用:
sendCommand(client_socket, "USER anonymous\r\n", sizeof("USER anonymous\r\n"));
问题是:缓冲区真的变空了,然后被命令填满,但服务器无法识别某些命令(例如 PASV)。问题出在代码中,因为如果我尝试注释掉,memset(&cmd, 0, sizeof(cmd));
我会得到当前命令的预期结果加上缓冲区尾部的错误 500 Unknown commandcmd
这是来自服务器的示例答案:
提前致谢!
c - 在C中增加数组大小的奇怪方法?
我认为通常你不能增加数组的大小。但如果我这样做:
字符 arr[4];
strncpy(arr,"12347777",8);
它显示当我调用 strlen(arr) 时长度增加了。有人可以向我解释那里发生了什么吗?
c - 使用 strncpy 从我离开的地方继续
我有一个字符缓冲区 - char buff[1000]
,并试图用来strncpy
读取前 16 个字符并将其存储为列表的一部分,然后读取接下来的 24 个字符并将其存储为列表的另一部分。但是,当我调用strncpy
两次时,第二次strncpy
返回缓冲区的开头,而不是我在第一次之后停止的地方strncpy
。
我该如何解决?谢谢!!!
c - 如何稳健地将文本复制到 char* 而不会出现任何错误
我有2个问题..
对 a 执行以下命令时是否需要添加终止字符
char *string
?strcpy();
strncpy();
是否有必要在执行上述任何操作之前分配内存以针对
char *string
?
例如..
请解释。
编辑: 在上面的代码中,我倒置了参数。这只是我在这里问问题时犯的错字。正确的方法应该是
visual-studio-2012 - strncpy 在 mingw 和 Visual Studio 2010 中的行为不同
考虑下面的代码:当我在 mingw 64 下运行时,d->box 等于“jp2”,那么 br 也等于“jp2”。即它是空终止的。所以 strcmp 成功并返回 0。
在 Visual Studio 2012 下,scrncpy 不返回以空字符结尾的字符串。
strcmp 在这种情况下失败。但是,根据 strcmp 文档:
///////////////////////////////////////// ///////////////////
strcmp 比较两个字符串 比较 C 字符串 str1 和 C 字符串 str2。
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或到达终止空字符。
///////////////////////////////////////// /////////////////////
因此,strcmp 应该会成功,即使一个字符串以 null 结尾而一个字符串不是。
关于为什么会这样的任何想法?
c - strncpy() 随机结果
这应该复制一个字符串,但打印出乱码的结果。谁能帮我吗?
我期待“Hello Hello”,但终端打印:
即使 strncpy 的签名,GCC 也会打印关于 a 和 b 具有不兼容指针类型的警告:
要求 2 个字符指针。那是因为数组总是 char** 如https://stackoverflow.com/a/20213168中所述?
c++ - strncpy 函数不适合我
我只是从 C++ 开始,所以在这里我可能会犯一个愚蠢的错误。下面是我的代码以及评论中的输出。我正在使用 Xcode。
c - strncpy 修改的程序的行为
考虑,
当我运行这个程序时,什么都没有打印出来。但是当我评论对 strncpy 的调用时,它会打印“Hello !! 0”。
用过ideone(“ http://ideone.com/j1cdKp ”)
当我使用 gcc 编译器(Debian 7.4)时,它给出了预期的输出(“Hello !!hello 6”)。
谁能解释这种行为?
-新手
c - strncpy 和字符 **
以下代码不会将匹配项 2 的内容复制到键 [0]。为什么呢?