我输入了一个单词,我需要用相同数量的符号创建一个新单词,并且新单词必须仅用'_'填充。
int main()
{
char word[30];
cout << "Enter word: ";
gets_s(word);
cout << word;
int k = strlen(word);
cout << "Amount of letters in word: "<< k << endl;
char *temp = new char[k];
for (int i = 0; i < k; i++)
{
temp[i] = '_';
}
cout << temp << endl;
}
答案 0 :(得分:12)
使用C字符串,这些字符串确实令人讨厌,通常可以在C ++中避免使用,因此必须必须NUL终止字符缓冲区:
char *temp = new char[k + 1];
for (int i = 0; i < k; i++)
{
temp[i] = '_';
}
temp[k] = 0; // Terminated
否则,您将继续读入随机存储器并看到各种垃圾。
使用std::string
会容易得多:
std::string temp;
for (int i = 0; i < k; ++i) {
temp += '_';
}
您不必记住要NUL终止,因为std::string
不需要它,标准库在内部使用了另一种方法,并且会自动为您处理。
但是,等等,还有更多!
如果您现在就采取行动并使用std::string
,则可以使用类似这样的出色工具:
std::string temp(k, '_');
更轻松!
答案 1 :(得分:-1)
在c ++中,当您在运行时创建数组或结构时(堆或堆栈中无关紧要),所有值都被垃圾填满。
为防止可能的错误:
对于结构:
typedef struct
{
int age;
char name[30];
}person;
person emptyPerson; // emptyPerson age is 0 , name is {0,0,0...}
void runtimeCreatePerson()
{
person runtTimePerson;
cout << runtTimePerson.name<< endl; // this will print garbage values
person runtTimePerson2 = emptyPerson; // now runtimePerson has same values with emptyResponse(copy of)
cout << runtTimePerson2.name<< endl; // this will print ""
}
int main()
{
runtimeCreatePerson();
}
对于数组,您必须在创建后填充它:
int i = 0;
int main()
{
char runtimeArray[50];
cout << runtimeArray<< endl; // this will print garbage values
for(i=0 ; i < 50 ; i++)
runtimeArray[i] = 0;
cout << runtimeArray<< endl; // this will print ""
}