Ir para conteúdo
Fórum Script Brasil
  • 0

Matriz int x Matriz char


Ark

Pergunta

8 respostass a esta questão

Posts Recomendados

  • 0

Desculpa cara eu acho que eu não soube me expressar direito, então, é...vou decompor a minha pergunta em 2:

1. Não tem como mesmo eu retornar ponteiro pra var local de uma função pra main?

2. O C faz alguma distinção especial entre matriz de char(strings) e matrizes de outros tipos, como int?

Abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
1. Não tem como mesmo eu retornar ponteiro pra var local de uma função pra main?

Se eu entendi bem a pergunta, o que você quer fazer é isto:

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


char * return_str()
{
    char str[] = "Beraldo";
    return str;    
}

int main()
{
    char str[10];
    
    strcpy(str, return_str());
    
    printf("%s\n", str);
    
    return 0;
}
Isso não funciona. Veja a saída:
$ gcc -Wall teste2.c -o teste2 && ./teste2
teste2.c: Na função ‘return_str’:
teste2.c:9: aviso: function returns address of local variable
՜6

O programa compila, mas o valor de str não é definido.

2. O C faz alguma distinção especial entre matriz de char(strings) e matrizes de outros tipos, como int?

Não sei se entendi bem essa pergunta...

Cada tipo de dado possui um determinado tamanho. Isso varia conforme a arquitetura do computador.

Isso é uma diferença entre int e char.

Link para o comentário
Compartilhar em outros sites

  • 0
Cada tipo de dado possui um determinado tamanho. Isso varia conforme a arquitetura do computador.

Isso é uma diferença entre int e char.

cara, peço desculpas se eu não fui tão claro.

Hum, é que eu achava que o compilador meio que tratava strings de uma forma mais especial que matrizes de outros tipos, até pelo fato de ter funções pra manipular strings tão bem como se fossem tipos de dados string mesmo. Acho que eu viajei, no fundo é só char mesmo, hehehe

Aproveitando o tópico sobre matrizes, eu queria que alguém me ajudasse numa coisa, eu não sei se dá, mas eu posso trabalhar a aritimética de ponteiros com um ponteiro apontando pra matriz inteira?

Tipo, eu posso fazer isso:

#include <stdio.h>
main(){
    int *p1, x, mat[15];
    p1 = mat;
    for(x=0;x<15;x++) scanf("%d", &mat[x]);
    while(*p1){
        printf("%d ", *p1);
        p1+=sizeof(int);
    }
    getch();
}

Com char eu incremento o ponteiro em 1 mas e com int faz assim mesmo, porque aqui tá dando erro na hora que eu executo o código, na hora de imprimir aparece só "lixo", uns numeros enormes.

Abraço.

Editado por Ark
Link para o comentário
Compartilhar em outros sites

  • 0
Isso não funciona. Veja a saída:

$ gcc -Wall teste2.c -o teste2 && ./teste2
teste2.c: Na função ‘return_str’:
teste2.c:9: aviso: function returns address of local variable
�՜6�[/code] O programa compila, mas o valor de str não é definido. ue, pra mim funciona sim, alem de q se você aloca o espaco, ele para de dar warning. veja só:
[code]#include <stdio.h>
#include <stdlib.h>
#include <string.h>


char *return_str()
{
    char *str = new char[15];
    str = "kuroi";
    
    return str;    
}

int main()
{
    char *str;
    
    str = return_str();
    
    printf("%s\n", str);
    
    delete str;

    return 0;
}
ark, esse while(*p1) acho q não vai funcionar... acontece q as strings são fechadas com o \ 0 e por isso funciona. com int você vai ter q usar o contador. fora isso, não precisa somar o sizeof. é so somar 1, acho q porque como o p1 ta declarado como pontero de int, ele entende q esse 1 significa mais 1 int e não simplesmente mais um byte. assim:
for(x = 0; x < 5; x++){
        printf("%d\n", *p1);
        p1 += 1;        
    }[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

então... tb achei estranho mas... funcionou sim... sem zuera...

no dev c++ aqui. compilei o codigo igualzinho, só adicionei o conio.h e um getch() antes do return.

ele deu o warning:

[Warning] address of local variable `str' returned

mas apareceu escrito beraldo...

mas então durub... acho q era pra funcionar sim... tipo, não funciona se eu der o prinft direto. mas com o strcpy funciona sim. não sei como funciona o strcpy internamente, mas acho q ele consegue copiar de alguma forma antes do valor se perder.

pelo menos aqui no dev c++ ta indo...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...