由函数修改的字符指针不会正确显示更新的字符串值

时间:2016-11-07 02:25:18

标签: c pointers

我在主命名为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);
}

1 个答案:

答案 0 :(得分:0)

我不确切地知道你希望在这里实现什么,
你得到垃圾值的原因是字符数组char first[30]=""是其函数inttocarp(int numin, char** outz)的本地,因此只有在执行所述函数时才存在。
因此printf("%s \n", *outz)在函数内正常工作
但是一旦函数结束,first[30]的范围结束并且它不存在,因此outs指向包含垃圾值的一些内存位置,并且因此你得到{{的垃圾值1}}在main()
但是当你将常量指向sq时,它的范围就是程序的结束,所以即使在*outz中,你也会得到包含常量<的内存位置/强>
main()全球减速将解决您的问题..