我在 main 中有一个名为 sq 的 char 指针,并且将指向 sq 的指针转换为函数 inttocharp,该函数将给定的整数转换为字符串,其中所有十进制数字都以相反的顺序排列。该字符串首先存储在临时字符数组中。然后,我尝试通过将强制转换指针指向的值分配为等于first 来修改sq 的值。当我使用命令 printf("%s\n", *outz); 时在打印指向的指针的更新字符串值的函数中,它可以正常工作,但是如果我在函数完成运行后尝试使用 sq 执行相同的命令,我只会得到无意义的符号。如果我将 *outz = first 替换为 *outz = "aw",则 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);
}
最佳答案
我不太清楚您希望在这里实现什么,
无论如何,您获得垃圾值的原因是字符数组 char first[30]=""
对其函数 inttocarp(int numin, char** outz)
是本地的code> 因此仅在执行该函数期间才存在。
因此 printf("%s\n", *outz)
在函数内工作正常
但是,一旦函数结束,first[30]
的范围就结束了,并且它不存在,因此 outs
指向某个包含垃圾值和 的内存位置因此,您在 main()
中得到 sq
的垃圾值
但是当你将一个常量指向*outz
时,它的作用域是程序的末尾,所以即使在main()
中,你也会得到它的存在包含该常量
的内存位置
使 first[30]
的减速全局化将解决您的问题..
关于由函数修改的字符指针将无法正确显示更新字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40456944/