C ++ Integer удаляет строку из * char []

Я пытаюсь прочитать несколько значений в моей C ++ программе.

Когда я ввожу однозначное число (внизу моего кода), я в порядке.

Однако, если я ввожу двузначное число, например «10», сообщение (второе, что я ввожу) стирается.

Вот мой код:

char * args[6];
unsigned time = 5;
char input[5];   // for string input
string message= "message";
//these strings and *chars are tempary strings for the purpose of reading in data
string temp;
char *temp2 = " ";
char *temp3 = "empty pointer";

args[count] = "-m";
count ++;

//Prompt for the message
cout <<endl<<"Alright, Please enter your message: "<<flush;
getline(cin, message);
cout <<endl<<endl;
message.append("\"");
message = "\""+message;
//we can't use the string, so we copy it to temp3.
strcpy(temp3, message.c_str());
//Now we input the string into our array of arguments
args[count] = temp3;
count ++;cout <<"Please enter time  "<<flush;
getline(cin,temp);

//validate input utnil its an actual second.
bool done = false;
while (done == false){
for(unsigned i = 0; i < temp.length() & i < 5; i++){
input[i] = temp[i];
}
done = CheckInteger(input, input);
time = atoi(input);
if (done == true & time < 1) {
cout <<"Unable to use a number less than 1 seconds!  "<<endl;
cout <<"Please enter the number of seconds?  "<<flush;
done = false;
}else if (done == false){
cout <<"Please enter the number of seconds?  "<<flush;
}else{
break;
}
getline(cin,temp);
}
cout <<endl<<endl;
time = atoi(input);
//timer argument
args[count] = "-t";
count ++;

// enter the time need to comvert from int to string.
ostringstream convert;
convert <<time;
temp = convert.str();
//need to convert from string to character
strcpy(temp2, temp.c_str());

args[count] = temp2;
count ++;

Как я могу это исправить?

1

Решение

strcpy(char* destination, const char* source) копирует source строка в массиве, указанном destination, Но ты звонишь strcpy(temp3, message.c_str()); который пытается скопировать строку в указатель на константный строковый литерал: char *temp3 = "empty pointer";, что приводит к неопределенное поведение [1]

+ Изменить temp3 от указателя на массив, который будет просто инициализирован этим строковым литералом:

char temp3[] = "empty pointer";

или даже лучше: используйте std::string вместо.


[1] C ++ 03 Standard 2.13.4 Строковые литералы (выбранные части):

§ 1 Обычный строковый литерал имеет тип «массив N const char»И статическая продолжительность хранения

§2 Эффект попытки изменить строковый литерал не определен.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]