Jump to content

O que é "stderr"?


Go to solution Solved by pmg,

Recommended Posts

Posted (edited)

Alguem me consegue explicar o que esta linha de codigo faz ?

main (int pArgc, char *pArgv[])
{
int op = atoi(pArgv[1]);
fprintf(stderr, “Memória insuficiente.\n”); /*Aqui o que e este stderr*/
Edited by pmg
falta LP
  • Solution
Posted (edited)

Basicamente o "stderr" refere-se ao ecra.

Quando chamas um programa compilado, podes redireccionar o input e o output (e os erros tambem).

O input, dentro do programa, e identificado pelo stream "stdin"

O output, dentro do programa, e identificado pelo stream "stdout"

O output de erros, dentro do programa, e identificado pelo stream "stderr"

Para fazeres redireccionamento do "stdin" (o inout vem dum ficheiro e nao do teclado) podes usar

executavel < stdin.txt

Para fazeres redireccionamento do "stdout" (o output vai para um ficheiro e nao para o ecra) podes usar

executavel > stdout.txt

Para fazeres redireccionamento do "stderr" (o output vai para um ficheiro e nao para o ecra) podes usar (testado em Linux, acho que tambem funciona em Windows)

executavel 2> stderr.txt

Podes ao mesmo tempo redireccionar os tres streams

executavel < stdin.txt > stdout.txt 2> stderr.txt
Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Ah... Já percebi. Obrigado 🙂

Em relação às 2 primeiras linhas o que fazem? A primeira supostamente e o inicio da função main mas que argumentos são aqueles que lá estão dentro? E o que é aquele "atoi"?

Posted

Em relação às 2 primeiras linhas o que fazem? A primeira supostamente e o inicio da função main mas que argumentos são aqueles que lá estão dentro? E o que é aquele "atoi"?

A primeira linha e' a declaracao da main(que deveria ter um int antes do main), os argumentos sao: O primeiro e' o numero de argumentos que sao passados e o segundo e' um array de apontadores que sao os argumentos que sao passados quando arrancas o programa.

o atoi e' "ansi to int" "converte" uma string num numero inteiro

Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Posted (edited)

Dar os nomes "pArgc" e "pArgv" aos argumentos da funcao main() é bastante esquisito!

Toda a gente, desde ha 40 anos, que lhes chama "argc" e "argv".

Porque é que has-de fazer diferente? ?!?!?!?!

Quando chamas um executavel com parametros, esses parametros chegam ao programa atraves dos argumentos da funcao main.

Por exemplo

executavel          --> argc=1; argv[0]="executavel"; argv[1]=NULL
executavel um dois  --> argc=3; argv[0]="executavel"; argv[1]="um"; argv[2]="dois"; argv[3]=NULL
Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

A primeira linha e' a declaracao da main(que deveria ter um int antes do main), os argumentos sao: O primeiro e' o numero de argumentos que sao passados e o segundo e' um array de apontadores que sao os argumentos que sao passados quando arrancas o programa.

o atoi e' "ansi to int" "converte" uma string num numero inteiro

Mas só converte a string se ela lá contiver um numero certo? Ou se ela contiver uma palavra também converte? Se converter a palavra o que significa esse inteiro?

Dar os nomes "pArgc" e "pArgv" aos argumentos da funcao main() é bastante esquisito!

Toda a gente, desde ha 40 anos, que lhes chama "argc" e "argv".

Porque é que has-de fazer diferente? ?!?!?!?!

Quando chamas um executavel com parametros, esses parametros chegam ao programa atraves dos argumentos da funcao main.

Por exemplo

executavel --> argc=1; argv[0]="executavel"; argv[1]=NULL
executavel um dois --> argc=3; argv[0]="executavel"; argv[1]="um"; argv[2]="dois"; argv[3]=NULL

Ok, também achei um pouco estranho aquela designação secalhar é engano :S.

Posted (edited)

Mas [a funcao atoi()] só converte a string se ela lá contiver um numero certo? Ou se ela contiver uma palavra também converte? Se converter a palavra o que significa esse inteiro?

A funcao atoi() nao detecta erros; por isso nao e aconselhavel usa-la.

A funcao que a substitui e que detecta erros e a strtol().

~~~~~~~~

Para experimentar, corri este programa

#include <errno.h>
#include <stdio.h>
#include <stdlib.h>

int main(void) {
 int i;

 errno = 0; i = atoi("0");
 printf("atoi(\"0\") returns %d (and sets errno to %d)\n", i, errno);
 errno = 0; i = atoi("-0");
 printf("atoi(\"-0\") returns %d (and sets errno to %d)\n", i, errno);
 errno = 0; i = atoi("999999999999");
 printf("atoi(\"999999999999\") returns %d (and sets errno to %d)\n", i, errno);
 errno = 0; i = atoi("-999999999999");
 printf("atoi(\"-999999999999\") returns %d (and sets errno to %d)\n", i, errno);
 errno = 0; i = atoi("foobar");
 printf("atoi(\"foobar\") returns %d (and sets errno to %d)\n", i, errno);
 errno = 0; i = atoi("-foobar");
 printf("atoi(\"-foobar\") returns %d (and sets errno to %d)\n", i, errno);

 return 0;
}

e obive este output

atoi("0") returns 0 (and sets errno to 0)
atoi("-0") returns 0 (and sets errno to 0)
atoi("999999999999") returns -727379969 (and sets errno to 0)
atoi("-999999999999") returns 727379969 (and sets errno to 0)
atoi("foobar") returns 0 (and sets errno to 0)
atoi("-foobar") returns 0 (and sets errno to 0)
Edited by pmg
adicionei exemplo

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Só uma correcção:

o atoi e' "ansi to int" "converte" uma string num numero inteiro

É ASCII to integer.

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Posted (edited)

o atoi e' "ansi to int"

É ASCII to integer.

e' string (ou alpha, se prefirerem) to int: quando executado numa maquina com EBCDIC tambem funciona como esperado 🙂

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.