J'essaye d'écrire une fonction pour obtenir une chaîne de uart. C'est pour un système embarqué donc je ne veux pas utiliser malloc.Pointers et fonction getstring
Le pointeur transmis à la fonction getstring semble pointer vers un vidage après l'appel de gets_e_uart1(). Je n'utilise pas de pointeurs trop souvent, donc je suis sûr que c'est quelque chose de vraiment stupide et trivial que je fais mal.
int main()
{
char *ptr = 0;
while(1)
{
gets_e_uart1(ptr, 100);
puts_uart1(ptr);
}
return 0;
}*end main*/
//-------------------------------------------------------------------------
//gets a string and echos it
//returns 0 if there is no error
char getstring_e_uart1(char *stringPtr_, const int SIZE_)
{
char buffer_[SIZE_];
stringPtr_ = buffer_;
int start_ = 0, end_ = SIZE_ - 1;
char errorflag = 0;
/*keep geting chars until newline char recieved*/
while((buffer_[start_++] = getchar_uart1())!= 0x0D)
{
putchar_uart1(buffer_[start_]);//echo it
/*check for end of buffer
wraparound if neccesary*/
if(start_ == end_)
{
start_ = 0;
errorflag = 1;
}
}
putchar_uart1('\n');
putchar_uart1('\r');
/*check for end of buffer
wraparound if neccesary*/
if(start_ == end_)
{
buffer_[0] = '\0';
errorflag = 1;
}
else
{
buffer_[start_++] = '\0';
}
return errorflag;
}
Mise à jour:
j'ai décidé d'aller à l'approche de passer un pointeur un tableau à la fonction. Cela fonctionne bien, merci à tous pour les réponses informatives.
code Mise à jour:
//-------------------------------------------------------------------------
//argument 1 should be a pointer to an array,
//and the second argument should be the size of the array
//gets a string and echos it
//returns 0 if there is no error
char getstring_e_uart1(char *stringPtr_, const int SIZE_)
{
char *startPtr_ = stringPtr_;
char *endPtr_ = startPtr_ + (SIZE_ - 1);
char errorflag = 0;
/*keep geting chars until newline char recieved*/
while((*stringPtr_ = getchar_uart1())!= 0x0D)
{
putchar_uart1(*stringPtr_);//echo it
stringPtr_++;
/*check for end of buffer
wraparound if neccesary*/
if(stringPtr_ == endPtr_)
{
stringPtr_ = startPtr_;
errorflag = 1;
}
}
putchar_uart1('\n');
putchar_uart1('\r');
/*check for end of buffer
wraparound if neccesary*/
if(stringPtr_ == endPtr_)
{
stringPtr_ = startPtr_;
*stringPtr_ = '\0';
errorflag = 1;
}
else
{
*stringPtr_ = '\0';
}
return errorflag;
}
Donc, si je crée un tableau d'une certaine taille dans main et passez le tableau et la taille du tableau à la fonction, cela devrait fonctionner correctement (comme je l'ai dit je ne veux pas utiliser malloc, donc chercher d'autres solutions) – volting
Passez un pointeur dessus, mais oui. Ensuite, vous devez simplement opérer directement sur le tampon que vous avez créé dans main() plutôt que d'en créer un dans getstring_e_uart1() –
Désolé c'est ce que je voulais dire dans un pointeur sur le premier élément. Je fais ça maintenant. Je publierai les résultats sous peu. Merci – volting