Хочу записать в переменную то, что получается в цикле.
char buff[50];
char str;
for (int i = 0; i < strlen(buff); i++){
if (buff[i] >= '0' && buff[i] <= '9')
strcat( str,buff[i]);
}
cout << str;
Выдает ошибку:"аргумент типа char не совместим с параметром типа const char*"
Так сойдет?
char buff[50];
// Надеюсь, код для заполнения buff у вас есть? :)
char str[50] = { 0 };
for (int i = 0, j = 0; i < strlen(buff); i++)
{
if (buff[i] >= '0' && buff[i] <= '9')
str[j++] = buff[i];
}
cout << str << endl;
Ваша ошибка в том, что вы в 1 (один) символ пытались воткнуть целую строку...
Раз у Вас метка c++, то и пишите на с++
char buff[50];
std::string sbuff(buff);
std::string str;
for (int i = 0; i < sbuff.length(); i++){
if (sbuff[i] >= '0' && sbuff[i] <= '9')
str += buff[i]
}
cout << str;
как по мне, код стал проще и читаемей.
Функция strcat() принимает два указателя на строки (см. strcat) - первый на изменяемую строку и второй на константную строку. Вы же при вызове функции в качестве первого и второго параметра передаете отдельные символы (char), которые, если будут интерпретированы программой как указатели на строки, непременно вызовут обращение по недопустимому адресу памяти 0x000000XX, где XX-код символа. Для того, чтобы заставить компилятор не ругаться, приведите первый и второй параметры к (char*) и (const char*) соответственно: strcat((char*)str,(const char*)buff[i]); Для того, чтобы исправить баг, который непременно после этого появится, передавайте указатели на корректные строки либо не используйте функцию strcat(), если Вы хотите оперировать отдельными символами.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей