c - 为什么 c 没有在 strncpy 函数中读取 i 的值
问题描述
我正在尝试编写一个程序,删除每个新行后的最后一个字母。我不知道为什么它不工作,但如果我在strncpy
函数中设置 i 的值,它可以工作的任何数字。
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
int i;
char s[]="ordinateur";
char a[strlen(s)+1];
for (i=0;i<=strlen(s);i++)
{
strncpy(a,s,(10-i));
printf("%s\n",a);
}
return 0;
}
解决方案
问题是,strncpy
当您只复制源字符串的一部分时,不会 NUL 终止字符串。所以你需要自己处理。
一种方法是添加这个
memset(a, 0, strlen(s)+1);
就在之前strncpy
另一种方法是添加这个
a[10-i] = '\0';
就在之后strncpy
也就是说,请注意您不需要strncpy
在循环内删除最后一个字母。你可以简单地做:
int main()
{
int i;
char s[]="ordinateur";
for (i=strlen(s); i>0 ; i--)
{
printf("%s\n",s);
s[i-1] = '\0'; // Remove last char
}
return 0;
}
推荐阅读
- extjs - 使 ExtJS 按钮的 ariaLabel 内容是动态的
- mysql - 无法在 Debian 11 上安装 mysql 服务器
- javascript - Chrome 扩展开发 - 如何将 info/variables/data 从 content.js 传递到扩展?
- vb.net - 将不正确的值写入文本文件
- sql-server - 如何在 ssrs 报告中分别格式化日期和月份
- reactjs - 从 react-infinite-scroller 测试 InfiniteScroll 组件
- javascript - 当 prevProps 的数据类型是对象或数组时如何在 React Hooks 中访问 prevProps
- javascript - 从副作用调用调用 jest.spyOn 时不起作用
- flutter - 如何从颤动的小部件中使用的所有下拉字段中获取值?
- node.js - 如果存在子文档,则在其下添加对象