0
Running the following code shows the error System.NullReferenceException
in function call SubString
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//
// Implementado o metodo Substring para retornar um nova area de memoria
// com os dados formatados conforme possição informada.
//
void SubString
(
char *ls_retorno,
char *as_origem,
int an_inicio,
int an_quantidade
)
{
//
// Variaveis de controle.
//
int
ln = 0,
ln_cotador = 0;
//
// Se posição inicial menor que 0 ou
// Se posição inicial muito exagerada...
//
if (an_inicio < 0)
{
an_inicio = 0;
}
//
// Obtem os caracteres desejados
//
for (
ln = an_inicio;
ln < an_quantidade + an_inicio;
ln++
)
{
ls_retorno[ln_cotador++] = as_origem[ln];
}
//
// Elimina todos os espacos nao ocupados.
//
ls_retorno[ln_cotador] = '\0';
printf("Resultado Funcao: >%s<", ls_retorno);
//
// Retorna a informacao tratada.
//
// return (ls_retorno);
}
int main()
{
//
// Cria a palavra chave e o valor.
//
char
*ls_palavrad;
char
*ls_valord;
//
// Aloca a espaco em memoria
//
ls_palavrad = (char*)malloc(30*sizeof(char));
ls_valord = (char*)malloc(200*sizeof(char));
//
// Limpa o buffer
//
ls_palavrad = (char*) NULL;
ls_valord = (char*) NULL;
printf(">Chamada<");
SubString(ls_palavrad, "mensagem=Sequencial invalido", 1, 5);
printf("Retorno: >%s<", ls_palavrad);
return 0;
}
As a curiosity, you don’t like to use spaces when writing code?
– DaviAragao
use only tabs
– Lucas Fernandes
And why do you use line breaking in
if
s and other structures? Don’t you think it gets harder to read the code like this?– DaviAragao
sorry if it makes it harder to understand like that, and matter of custom even
– Lucas Fernandes
You allocate memory for the variable
ls_palavrad
and then you "clean up" her buffer with(char*) NULL
. When you performSubString(ls_palavrad, ..., ...
you try to access:ls_retorno[ln_cotador++]
as a result ofNullReferenceException
.– stderr
but if I just create and do the malloc gets junk, some hint how to fix it?
– Lucas Fernandes