сколькоб не ввёл символов всегда y = 12, где ошибочка?
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
int main(int)
{
char *x,z;
cin >> z;
x = &z;
int y = strlen(x);
printf("%d",y);
system("pause");
return 0;
}
Другие языки программирования и технологии
вопрос по си
На счёт 12 это что-то из области фантастики! Хотя всё может быть, так как здесь уже всё написано неправильно
z - это переменная типа char и ввести туда можно только 1 символ
в x Вы записываете адрес этой переменной
а в y вы пытаетесь определить размер строки, которая получается в результате построения программы и где там завершение строки будет - совсем неизвестно. То есть 12 Вы получили совершенно случайно. Так же могло выпасть и другое число
#include <string>
#include <iostream>
using namespace std;
int main()
{
char x[128];
cin >> x;
int y = strlen(x);
cout << y << endl;
system("pause");
return 0;
}
или так
#include <iostream>
#include <string>
using namespace std;
int main()
{
int y;
cout << "input str: ";
string s;
getline(cin, s);
cout << "output str: " << s << endl;
y = s.size();
cout << "size str: " << y << endl;
cin.get();
}
можно вообще без y = s.size(); и y = strlen(x); заменить их на for(y=-1;s[++y];);
Кстати я понял почему у Вас получилось число 12. Вы в предыдущей программе использовали "Hello world!", поэтому компилятор, скорее всего, Вам оставил этот участок памяти. Вы, похоже, могли увидеть и остаток предыдущей фразы
z - это переменная типа char и ввести туда можно только 1 символ
в x Вы записываете адрес этой переменной
а в y вы пытаетесь определить размер строки, которая получается в результате построения программы и где там завершение строки будет - совсем неизвестно. То есть 12 Вы получили совершенно случайно. Так же могло выпасть и другое число
#include <string>
#include <iostream>
using namespace std;
int main()
{
char x[128];
cin >> x;
int y = strlen(x);
cout << y << endl;
system("pause");
return 0;
}
или так
#include <iostream>
#include <string>
using namespace std;
int main()
{
int y;
cout << "input str: ";
string s;
getline(cin, s);
cout << "output str: " << s << endl;
y = s.size();
cout << "size str: " << y << endl;
cin.get();
}
можно вообще без y = s.size(); и y = strlen(x); заменить их на for(y=-1;s[++y];);
Кстати я понял почему у Вас получилось число 12. Вы в предыдущей программе использовали "Hello world!", поэтому компилятор, скорее всего, Вам оставил этот участок памяти. Вы, похоже, могли увидеть и остаток предыдущей фразы
UB у тебя. Неопределенное поведение. x - указатель на символ. z - символ. x указывает на z. strlen перебирает символы, начиная с того, на который показывает x, пока не найдет 0, и возвращает количество символов до нуля. Но что находится в памяти после z - неопределено, это зависит от компилятора, ОС, состояния памяти и т. д. Поэтому результат может быть произвольным, в твоем случае - 12.
z - это char
x - указатель на char
а strlen считает, пока 0 не встретит.
а в x = &z - нет терминирующего нуля, это не строка.
char x[256];
cin >> x;
strlen( x );
до 256 символов влезет.
x - указатель на char
а strlen считает, пока 0 не встретит.
а в x = &z - нет терминирующего нуля, это не строка.
char x[256];
cin >> x;
strlen( x );
до 256 символов влезет.
int main(int)
{
char *x,z[1024];
cin >> z;
// вот если тебе надо будет строка с пробелами, то тогда так
// cin . getline (z, 1024);
x = z;
int y = strlen(x);
printf("%d",y);
system("pause");
return 0;
}
это простейший способ исправить ситуацию: если ты вводишь строку то должно быть место под все ее символы, а ты выделяешь место ровно под один символ и тогда опредение длины строки - нонсенс
{
char *x,z[1024];
cin >> z;
// вот если тебе надо будет строка с пробелами, то тогда так
// cin . getline (z, 1024);
x = z;
int y = strlen(x);
printf("%d",y);
system("pause");
return 0;
}
это простейший способ исправить ситуацию: если ты вводишь строку то должно быть место под все ее символы, а ты выделяешь место ровно под один символ и тогда опредение длины строки - нонсенс
Спрашиваешь по Си, а пишешь на С++..определись с языком все-таки.
char - переменная которая может принять один символ, а ты в нее пишешь целую строку из консоли: cin >> z; Используй массив из char элементов.
char - переменная которая может принять один символ, а ты в нее пишешь целую строку из консоли: cin >> z; Используй массив из char элементов.
Похожие вопросы
- Вопрос от начинающего ))) Список вопросов (питон, Си и в принципе работа ПК) (Мало что понимаю)
- простенький вопрос по Си....
- Вопрос по Си
- Вопрос по СИ (внутри)
- Вопрос по Си. if ((i++)==10) и i++ if (i==10) будет ли первый пример работать быстрее чем второй?
- Народ, помогите, по вопросу языка СИ, команды fgets!
- Вопрос про компиляторов ЯП Си..
- Разница между Си и Си++
- Как из си++ сделать си?)... подробнее
- Какие преимущества сохранил Ассемблер к Си?