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

magikRing

apagar string dentro de struct em C

10 mensagens neste tópico

boas eu tenho a estrutura seguinte:

typedef struct
{
char conteudo[25][80];
char title[80];
}texto;

e tenho tambem uam variavel do tipo texto:

texto editor[10]

agora o que eu queria fazer era ao comando 'del' apagar o conteudo e o title

alguem sabe?

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok ja descobri como fazer. ja agora fica aqui:

void delete(char texto[][80])
{ 
int i;
for(i=0;i<25;i++) 
strcpy(texto[i],"\0");	
texto=0; 
}

e um exemplo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas eu tenho a estrutura seguinte:

typedef struct

{

char conteudo[25][80];

char title[80];

}texto;

e tenho tambem uam variavel do tipo texto:

texto editor[10]

Atenção que o editor não é uma variável do tipo texto. É um array com 10 posições em que cada uma é um texto, como definiste acima, simplisticamente falando. Se queres apagar o conteúdo dos dois arrays que tens nessa estrutura porque não usas funções que já existem em C para fazeres o que queres? Como por exemplo o memset:

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

/* variavel global */
typedef struct
{
   char conteudo[25][80];
   char title[80];
} texto;

/* prototipos */
void delete(texto * apontadorTexto);

/* apaga uma estrutura texto */
void delete(texto * apontadorTexto) 
{
    memset(apontadorTexto, 0, sizeof(texto));
}

int main(void)
{
texto * apontaTextinho;
/* aloca espaço para uma estrutura texto */
apontaTextinho = (texto *) malloc(sizeof(texto));

/* copia para o title a string nada */
strcpy(apontaTextinho->title, "nada");

/* apaga toda a estrutura texto */
delete(apontaTextinho);

/* se chega aqui, esta tudo bem (sai) */
return 0;		
}

Não é muito mais simples e bonito?  :biggrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e mais simples e bonito sem duvida, mas ainda nao dimino bem os apontadores :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se tiveres dúvidas sobre apontadores coloca um post que a comunidade P@P ajuda-te com certeza  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não se esqueçam de libertar a memória com o free().

Tens toda a razão. Esqueci-me desse pormenor importante!

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

/* variavel global */
typedef struct
{
   char conteudo[25][80];
   char title[80];
} texto;

/* prototipos */
void delete(texto * apontadorTexto);

/* apaga uma estrutura texto */
void delete(texto * apontadorTexto) 
{
    memset(apontadorTexto, 0, sizeof(texto));
}

int main(void)
{
texto * apontaTextinho;
/* aloca espaço para uma estrutura texto */
apontaTextinho = (texto *) malloc(sizeof(texto));

/* copia para o title a string nada */
strcpy(apontaTextinho->title, "nada");

/* apaga toda a estrutura texto */
delete(apontaTextinho);

/* liberta memoria alocada */
        free(apontaTextinho);

        /* se chega aqui, esta tudo bem (sai) */
return 0;		
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso se ele quiser apagar, pode não interessar perdes a estrutura.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

agora o que eu queria fazer era ao comando 'del' apagar o conteudo e o title

O conteúdo e o título compõem a estrutura toda, por isso é que na função delete apago a estrutura toda. Se não se quiser apagar a estrutura e só o contéudo ou o título é quase o mesmo código; muda-se o size passado no último argumento do memset e obviamente o apontador (ou para o conteúdo ou para o título). Tudo depende agora do que se quiser fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora