我在主命名为sq中有一个char指针,我将一个指向sq的指针转换为函数inttocharp,它将给定的整数转换为一个字符串,其所有十进制数字的顺序相反。该字符串首先存储在临时char数组中。然后我尝试通过将铸造指针指向的值的值赋予等于first来修改sq的值。当我使用命令printf("%s \ n",* outz);在函数中打印指向的指针的更新字符串值,它没有问题,但如果我在函数运行完成后尝试使用sq的相同命令,我只得到无意义的符号。如果我用* outz =" aw"替换* outz = first,则sq的printf命令打印出预期值" aw"。有什么问题,如何解决?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void inttocharp(int numin, char** outz);
int main(void) {
char* sq;
inttocharp(13719, &sq);
printf("%s \n", sq);
return(0);
}
void inttocharp(int numin, char** outz) {
char first[33] = "";
char temp;
int currnum;
int divisval = 10;
do {
printf("%d \n", numin);
printf("%d \n", divisval);
currnum = numin%divisval;
printf("%d \n", currnum);
numin -= currnum;
currnum *= 10;
currnum /= divisval;
printf("%d \n\n", currnum);
temp = 0x30 + currnum;
strncat(first,&temp,1);
divisval *= 10;
} while(numin != 0);
*outz = first;
printf("%s \n", *outz);
}
答案 0 :(得分:0)
我不确切地知道你希望在这里实现什么,
你得到垃圾值的原因是字符数组char first[30]=""
是其函数inttocarp(int numin, char** outz)
的本地,因此只有在执行所述函数时才存在。
因此printf("%s \n", *outz)
在函数内正常工作
但是一旦函数结束,first[30]
的范围结束并且它不存在,因此outs
指向包含垃圾值的一些内存位置,并且因此你得到{{的垃圾值1}}在main()
但是当你将常量指向sq
时,它的范围就是程序的结束,所以即使在*outz
中,你也会得到包含常量<的内存位置/强>
main()
全球减速将解决您的问题..