avertissement: l'initialisation de fait de nombre entier à partir de pointeur sans un casting
Je suis en train d'écrire un fonction qui fonctionne comme IntegerToString
en utilisant la récursivité,mais la GCC vient
"its.c: In function ‘ITS’:
its.c:26:3: warning: initialization makes integer from pointer without a cast [enabled by default]
its.c:26:3: warning: (near initialization for ‘buffer[0]’) [enabled by default]
its.c:26:3: warning: initialization makes integer from pointer without a cast [enabled by default]
..."
Je ne sais pas comment les fixer avec elle.S'il vous plaît aider moi.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *Change(char *buffer,int n)
{
if(n==0){
return(buffer);
}else{
int left=n%10;
n=n/10;
int len=strlen(buffer);
buffer[len-1]='\0';
char new_array[30]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};
printf("%s\n",new_array);
new_array[0]=left+'0'; printf("NEW:%s\n",new_array);
strcat(new_array,buffer); printf("TEST:%s\n",new_array);
return(Change(new_array,n));
}
}
char *ITS(int n)
{
char buffer[30]={NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL};;
return(Change(buffer,n));
}
int main()
{
int n=1729;
char *buffer=(char*)malloc(30*sizeof(char));
if(buffer==NULL)
{
printf("Malloc Fault!\n");
exit(-1);
}
buffer=ITS(1729);
printf("%s\n",buffer);
return 0;
}
- Pourquoi essayez-vous de initailize
char
objets avecNULL
?NULL
est destiné à être utilisé avec des pointeurs.char
n'est pas un pointeur, c'est un entier. - Je pense que vous êtes de retour d'un local (pile allouée) char tableau à un couple de points. Que ne se terminera pas bien.
- Parce que je veux remplacer les ordures de la valeur avec rien dans le tableau.Je initailize le tableau new_array et de printf et obtenir"]�",c'est une poubelle de la valeur.Je veux remplacer.Alors, comment je peux le résoudre ti?
- Vous devez passer de stockage de main(). Les variables locales dans SON() et Modifier() ne sont plus valables lors de leur retour.
- Alors comment je peux résoudre ce problème?
- Alors comment je peux changer le code?S'il vous plaît..
Vous devez vous connecter pour publier un commentaire.
Comme il a été souligné dans les commentaires, ce n'est pas sécuritaire d'utiliser et de retour local de stockage de l'fonctions. Modifier les signatures de SES() et Modifier() afin qu'ils prennent un tampon de main():
Si vous êtes intelligent, vous pouvez Changer de renvoyer une valeur différente de celle de SON fait, et l'utiliser pour dire à chaque niveau où le chiffre suivant va.
Si vous êtes limité sur la signature de SON (voir les commentaires), puis utiliser la mémoire statique dans SES. Ses pas thread-safe, mais il faudra travailler autrement:
static char buffer[30] = { 0 }
. Ensuite, vous pouvez revenirbuffer
parce qu'il sera toujours valable dans la mémoire après le fait. Son tout simplement pas thread-safe.Ne pas initialiser le tableau de caractères avec des valeurs Null (même si la valeur NULL est en fait... 0 ou Quand la macro NULL pas 0?). La valeur NULL est utilisé pour indiquer qu'un pointeur pointe vers "rien". Si vous souhaitez initialiser le tableau avec des 0 vous pouvez utiliser memset (type C):