马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写了一段代码,目的是要将从标准库输入设备读入的字符串,复制到固定长度的数组,并且可以控制复制的字符数小于那个固定长度。代码如下:#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int main()
{
string str;
const size_t str_size = 10;
char result_str[str_size + 1];
cout << "Enter a string (<= " << str_size << " charactors ) : " << endl;
cin >> str;
//计算需复制的字符的数目
size_t len = strlen(str.c_str());
if (len > str_size)
{
len = str_size;
cout << "string is longer than " << str_size << " charactors. " << endl;
}
//复制str里len个字符到result_str
strncpy(result_str, str.c_str(), len);
//末尾加上null
result_str[len + 1] = '\0';
//输出result_str
for (int ix = 0; ix != str_size; ++ix)
cout << result_str[ix] << " ";
while (1);
return 0;
}
现在有两个问题希望大家能帮忙分析一下,万分感谢!
1、输入超过十个字符时会出现如下的结果:
但同时仍然有输出:
这个的意思应该是说我的输入溢出了吧?请问要怎么改呢?我这个程序本来就是要可以运行在输入大于10个字符的情况下的啊。
2、在输入没有超过十个字符的情况下,我最后写了一个输出数组result_str的for循环,但是运行后却没有输出是为什么呢?如图:
希望懂的朋友们能解答一下,万分感谢了!
//输出result_str
for (int ix = 0; ix != str_size; ++ix)
cout << result_str[ix] << " ";
你用循环输出
那么 添加字符串尾部的0的操作是多余的
另外 你不管输入多少都输出 str_size个字符
是不对的 你只输入 3个字符 数组只有4个元素被赋值
而你输出了 10个元素 其中6个元素是值无效的
还有 就算你要加字符串尾部的0
也应该是加在下标len的元素
而不是len+1的元素
|