首页 > 解决方案 > 如何将偶数个字符复制到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"

标签: cstringchar

解决方案


仅将 的前六个字符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 个字符,因为您总是需要一个空终止符来表示字符串。


推荐阅读