将id的前6个字符复制给s并输出,为什么得不到想要的东西?哪里的问题啊?

#include <iostream>
#include <string.h>
using namespace std;

int main()

{
int num,i=0;
cin>>num;

for(i=0; i<num; i++)
{
char id[18] ;
cin>>id;
char s[6]={};
strncpy(s,id,6);
cout<<id<<"\t"<<s<<endl;
}
return 0;

}

ITMISS
浏览 148回答 3
3回答

小怪兽爱吃肉

因为strncpy不自动追加空字符到字符串结尾,所以s字符串没有结尾,需要做s[6] = 0;操作才行

慕田峪4524236

如果你输入的字符串id的长度大于6个,strncpy到s时,会导致s不能正常的是\0结尾。

哈士奇WWW

char s[6]={};改为char s[7]={0};试试,原因是:如果你输入的id字符串长度等于或大于6个时,前6个字符都会被复制到s中,而s只有6个字符的空间,导致s字符串最后的字符不是终止符结束,cout的输出结果就可能会出现乱码。所以你要把s字符串预留出一个字符来保存终止符'\0'。
打开App,查看更多内容
随时随地看视频慕课网APP