c - 如何将偶数个字符复制到C中的字符串?
问题描述
我正在尝试在另一个字符串中复制偶数个字符。它根本不起作用。但是,如果我尝试复制奇数个字符,它会起作用。我尝试使用 for 和函数 strncpy 并打印我想要的单词和一个随机字母。
int position=6;
char *stringFirst=malloc(position);
for(int j=0;j<position;j++){
stringFirst[j]=fileStingToMod[j];
}
printf("%s",stringFirst);
free(stringFirst);
这是我尝试运行的另一个代码:
int position=6;
char *stringFirst=malloc(position);
strncpy(stringFirst,fileStingToMod,position);
printf("%s",stringFirst);
free(stringFirst);
在这两种情况下,代码都会给我以下输出:
骆驼
或者
骆驼↓</p>
名为 的字符串fileStringToMod
是 : "cammelloverde"
。
解决方案
仅将 的前六个字符fileStringtoMod
复制到 指向的内存中stringFirst
。
请注意,缺少空终止符来确定字符串的结尾。
格式说明%s
符是打印字符串,需要由 null 确定,但stringFirst
没有 null 终止符。
使用printf("%s",stringFirst);
调用未定义的行为。
采用
stringFirst[position-1] = '\0';
前
printf("%s",stringFirst);
如果您只想打印"camme"
.
或者,您可以使用
printf("%.*s", position, stringFirst);
正如@IngoLeonhardt 所建议的,评论或
printf("%.6s", stringFirst);
即使字符串中没有空终止符。
如果要打印 6 个字符(如“cammel”),则需要为 7 个字符分配内存,而不是 6 个字符,因为您总是需要一个空终止符来表示字符串。
推荐阅读
- php - 我不知道如何在 SQL 中使用 $where 来处理选定的类别
- java - Sonarqube:编写自定义java规则时如何获取表达式字符串?
- kubernetes - 多主机设置上的 Kubernetes NodePort / 负载均衡器 / Ingress:有必要吗?
- c# - 是否可以在 C# 中从 IIS 获取服务端点?
- laravel - 在按钮单击时调用 app.blade.php 中的 Vue.js 函数
- php - 我在 wordpress 中创建了自定义帖子类型插件,但元框未显示在添加新内容中?
- c# - RSA 使用 iOS 和 C# 实现
- php - Laravel 5.7 中的常量抛出已定义的错误
- java - Java Socket 块 ObjectInputStream
- javascript - Javascript dragenter和dragleave事件在拖动孩子时不会触发