Ir ao conteúdo
  • Cadastre-se

problema com strings em função


marcel.mc

Posts recomendados

Pessoal, não entendo porque essa função está bugando. O código é executado mas ao chegar na linha strcat(string, stringBase), da erro. Devo estar fazendo algo muito bobo, mas não conseguir encontrar o que é. Se alguém souber por favor me ajudem.

 

A função recebe um inteiro qualquer (suponhamos 100), o converte para char* e  concatena com string ("saida/"). O resultado é concatenado conforme a base com a frase correspondente, nesse caso o retorno deveria ser: "saida/100_RND.txt"

char* arquivoNomeSaida(int base){    char *string=NULL, *stringBase=NULL;    stringBase = (char*) malloc(8*sizeof(char));    itoa(base,stringBase,10);    string = (char*) malloc(22*sizeof(char));    string = "saida/";    strcat(string, stringBase);    if(base<=5)        return strcat(string, "_ASC.txt");    else        return strcat(string, "_RND.txt");}
Link para o comentário
Compartilhar em outros sites

@marcel.mc

 

O que seria char *string ?

Em C seria uma variavel do tipo char, e em C++ do tipo string ?

 

E outra coisa porque você aloca dinamicamente string e stringBase, se os valores 8 e 22 sao estatico...

 

Eu sei que isso nao resolve o problema, mas eu queria entender...

Link para o comentário
Compartilhar em outros sites

@marcel.mc

 

 

Não é muito aconselhável usar itoa() pois é uma função não-padrão e pode dificultar a portabilidade do código (poder compilar em outras plataformas). Uma boa alternativa seria o uso de sprintf (e é uma mão na roda para esse seu caso):

#include <stdio.h>#include <stdlib.h>#include <string.h>char* arquivoNomeSaida(int base){    char* buf = malloc(sizeof(char) * 100);    if (base <= 5)        sprintf(buf, "%s%d%s", "saida/", base, "_ASC.txt");    else        sprintf(buf, "%s%d%s", "saida/", base, "_RND.txt");    return buf;}int main(){    char* pChar;    pChar = arquivoNomeSaida(100);    printf("%s", pChar);    free(pChar);    return 0;}

O tamanho ali alocado foi bem mais que o suficiente. Você decide o tamanho a ser alocado... Outra coisa, não é necessário fazer typecast de malloc em C..

 

 

No seu código, você faz isto:

string = "saida/";

Em C, é necessário usar strcpy() para copiar strings.

 

 

 

Espero que ajude,

 

 

LNW

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...