Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

msmsms

preencher um vetor sem lixo de memoria

Recommended Posts

msmsms

fiz o seguinte programa com intenção de receber o output "000"

mas quando faço a impressão o que recebo é 000<vario lixo de memoria>

como resolvo?

gostaria também de saber como é que posso converter no fim o str[] para um *str

nota: a variavel cont=3 tem mesmo de existir tal como está porque ela terá de ser determinada com uma função à parte

não pode ser adicionada por meio de define

#include<stdio.h>
int cont = 3;
int main(){
char str[cont];

int i;
for(i=0;i<cont;i++){
str[i] = '0';
}

//puts(str);
printf("%s\n", str);

return 0;
}

Edited by msmsms

Share this post


Link to post
Share on other sites
HappyHippyHippo

como as questões estão descontextualizadas, as respostas também o serão

fiz o seguinte programa com intenção de receber o output "000"

mas quando faço a impressão o que recebo é 000<vario lixo de memoria>

como resolvo?

depende

gostaria também de saber como é que posso converter no fim o str[] para um *str

com um cast

nota: a variavel cont=3 tem mesmo de existir tal como está porque ela terá de ser determinada com uma função à parte

não pode ser adicionada por meio de define

o que quer que seja essa desculpa, nunca será uma desculpa para a utilização de uma variável global


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
msmsms

como as questões estão descontextualizadas, as respostas também o serão

depende

com um cast

o que quer que seja essa desculpa, nunca será uma desculpa para a utilização de uma variável global

coloquei a variavel como local mas mesmo assim ao fazer o printf apos o ciclo for obtenho lixo de memoria

estou a utilizar o linux ubuntu será disso?

eu não consigo colocar aqui os caracteres que me aparecem apos os 000, porque são como letras chinesas

se o vetor apenas tem 3 posições porque razão imprime mais do que 3 caracteres?

quando tento imprimir carácter a carácter dentro do for não obtenho lixo de memória:

> 0

> 0

> 0

$

int main(){
int cont = 3;
char str[cont];

int i;
for(i=0;i<cont;i++){
str[i] = '0';
}

//puts(str);
printf("%s\n", str);

return 0;
}

Edited by msmsms

Share this post


Link to post
Share on other sites
msmsms

vamos lá ver ...

o que define uma string em C ?

uma string em C é um vetor!

não queria declarar o vetor desta forma *str porque depois vou ter de fazer concatenações a essa string onde estou a pensar usar strcat() sendo que apenas posso usar com esta função strcat() se o argumento for do tipo str[] de acordo com as experiências que fiz.

posteriormente ou em fase final precisarei da string no formato pointer para entregar como argumento a uma função que apenas aceita string em formato pointer

o meu único problema é esse lixo de memória

ao se fazer a concatenação com strcat() leva os caracteres 0 e depois leva o lixo de memória e então a string concatenada

algo assim: 000���[�s"^�ola

sendo que o output desejado seria: 000ola

Edited by msmsms

Share this post


Link to post
Share on other sites
HappyHippyHippo

não queria declarar o vetor desta forma *str porque depois vou ter de fazer concatenações a essa string onde estou a pensar usar strcat() sendo que apenas posso usar com esta função strcat() se o argumento for do tipo str[] de acordo com as experiências que fiz.

posteriormente ou em fase final precisarei da string no formato pointer para entregar como argumento a uma função que apenas aceita string em formato pointer

o meu único problema é esse lixo de memória

ao se fazer a concatenação com strcat() leva os caracteres 0 e depois leva o lixo de memória e então a string concatenada

algo assim: 000���[�s"^�ola

completamente irrelevante à questão colocada ...

uma string em C é um vetor!

é um vector/array, mas com uma particulariedade ... qual ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
msmsms

o vetor tem de estar declarado global tal como tinha feito no inicio e o tamanho do mesmo não pode ser definido por meio de variável

caso o seja dá origem a lixo de memória mas não entendo porquê

não posso fazer o que se segue:

#include<stdio.h>
#include<string.h>
char str[100];
int main(){
int cont = 4;

int i;
for(i=0;i<cont;i++){
   str[i] = '0';
}
   strcat(str,"ola");
   printf("%s\n", str);

   return 0;
}

porque eu tenho de permitir um tamanho de vetor cujo o máximo pode ir até ao máximo que o computador permitir

como não tenho muito mais tempo vou colocar um tamanho absurdo de capacidade de vetor para tentar escapar desta

Edited by msmsms

Share this post


Link to post
Share on other sites
HappyHippyHippo

novamente, não respondeste à questão colocada anteriormente


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
msmsms

novamente, não respondeste à questão colocada anteriormente

podes me responder a esta

qual é o tamanho máximo de um vetor em C?

char str[99999999999999999999999999999999999999999999999999999999];

diz que é too large!

será normal?

Share this post


Link to post
Share on other sites
HappyHippyHippo

será normal?

eu não sei se estás a gozar ou simplesmente não sabes

no entanto. vou te dar o benefício da dúvida.

não quer dizer que me vou dar ao trabalho de responder a essa questão.

fico somente à espera que respondas à que coloquei : "uma string é um vector/array, mas com uma particulariedade ... qual ?"


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
bubulindo

A string e terminada com '\0'... se definires o teu vector como 000\0 provavelmente resolve o problema...


include <ai se te avio>

Mãe () {

}

Share this post


Link to post
Share on other sites

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

×

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.