Когда я скомпилирую это с помощью GCC на linux, так как я жду ввода, появляется сообщение «hi». Я не хочу использовать scanf и хочу знать, почему привет отображается, когда я прошу пользователя ввести имя. Также, когда я хочу распечатать имя файла, который был только что передан, я получаю символы мусора. В netbeans я получаю то, что хочу. но на Linux, он решает действовать странно. пожалуйста, помогитеДополнительная строка добавлена во время входного системного вызова в C
Код:
int main(int argc, char** argv)
{
char val[70];
if(write(1, "Please input your name", 36)!=36)
{
return -1;
}
if(read(0, val, 36) < 0)
{}
if(write(1, val, 36)!=36)
{}
printf("Yo");//THIS IS PRINTING OUT WAY BEFORE IT IS CALLED, ANY VARIABLE WITH A STRING GETS PRINTED OUT, EVEN WITHOUT PRINTF BEING INVOKED
}
выход:
Please input the file nameYo: hi
hi
???Om?0?a?Sm? <<WHAT IS THIS? I DONT GET THIS ON NETBEANS
Вы уверены, что '«Пожалуйста, введите ваше имя»' 36 символов - Я не очень хорошо считая всегда, но я получаю 22 или некоторые такие. .. Конечно, «Yo», вероятно, будет храниться вскоре после этой строки ... –
Ваша строка вывода не 36 байт, поэтому вы лжете системе, но ожидайте, что она поступит правильно. Обычно это не работает. –
Не смешивайте вызовы для чтения/записи с вызовами функций C stdio, таких как fread/fwrite/printf. Используйте тот или другой, или вы будете очень смущены тем, как они будут буферизовать ввод и вывод. –