strncpy 无法正确修剪 - 相同的长度
strncpy doesn't trim properly - same length
我做了一个程序,应该从两端修剪一个字符串,就像这个例子一样:
对于 12345,我应该有:1, 12, 123, 1234, 12345; 2, 23, 234, 2345; 3, 34, 345; 4, 45; 5
#include <iostream>
#include <string.h>
using namespace std;
char text[30]="123456", text2[30], text3[30];
int main()
{
for(int i=0; i<strlen(text); i++)
{
strcpy(text2, text+i);
for(int j=1; j<=strlen(text)-i; j++)
{
strncpy(text3, text2, j);
cout<<text3<<endl;
}
}
return 0;
}
消除第一个字符的部分有效,但是当我使用 strncpy 从字符串末尾消除时,我得到的结果与我要修剪的字符串长度相同;例如,我得到 55555 而不是只有 5。在strncpy
之前,我尝试用text3[0]=' '
初始化text3
,但我不断得到相同的结果,我不知道为什么。我确实在strncpy之前放了cout<<j
,以查看它复制了多少个字符,并且数字与剩余字符串的长度完全匹配。
当我们使用 "1234"
初始化 text
时考虑输出:
1
12
123
1234
2234
2334
2344
3344
3444
4444
strncpy
正在复制到 text3 缓冲区中,但已经存在的内容仍然存在,因为它不会以 null 终止。如果忽略其余字符,则可以看到所需的输出在开头被复制。
112
123
1234
年2234
2334
2344
3344
3444
4444
因此,您需要以空值终止复制的部分。strncpy
之后,你可以做text3[j] = 0;
。
在行动中观察这一点
为什么不使用字符串?
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str = "12345";
int b, e;
for(int b = 0; b < str.length(); b++)
for(int e = b + 1; e < str.length() - b; e++)
cout << str.substr(b, e) << endl;
return 0;
}
相关文章:
- strncpy之后的char数组的错误行为
- OpenCascade:从 IGES 读取修剪曲面
- 范围修剪视图实现不适用于反向视图
- 从输入文件修剪空格
- 在 MFC 中使用 strncpy() 复制字符串时截断的数据
- 如何有效地修剪和合并四叉树中的节点?
- gcc臂中strncpy的替换
- 如何从 CreateProcessW 函数的 lpApplicationName 中修剪空格?
- 使用 strncpy 复制 tcp 流会导致故障吗?
- C++/Arduino:strcpy()、strncpy() 和 memcpy() 在无符号字符上不起作用
- C strncpy意外输出
- QString 从行首或行尾修剪非空格字符
- 修剪CSTRING而无需复制
- 比strncpy更好地复制字符阵列的部分方法
- 连续修剪的产品崩溃EIGEN
- 编译代码时麻烦 - strncpy char*和string
- DLL 调用涉及 strncpy() 的方法
- 如果strncpy将随机数据复制到缓冲区中会发生什么
- 为什么 vsnprintf 没有像 strncpy 那样写入相同数量的字符
- strncpy 无法正确修剪 - 相同的长度