这是我的问题。我没有在我的代码中获得正确的char *返回值。以下是我的代码部分
主要功能:
int main(int argc, char *argv[]){
....
....
while (counter < line_C){
char* zzz = searcher(line_arr[counter], 0);
prog_counter[prog_counter_C] = atoi(zzz);
prog_counter_C++;
counter++;
}
}
zzz获取正确的指针,但该值似乎被覆盖。 这里有更多的代码片段来显示搜索器功能的运行时间。
char* searcher(char input[], int method){
...
...
else if (strncmp(instruction,"ADD", 3) == 0)
return ADD(passer, method, 0);
...
...
}
添加功能的代码段:
char* ADD(char input[], int method, int bytecount){
switch(method){
case 0:
char wtf[2];
char *returner = itoa(Parse_Prog_Count(input), wtf, 10);
return returner;
break;
}
Parse_Prog_Count函数的代码片段:
int Parse_Prog_Count(char input[]){
...
...
return bytecount;
}
我确实尝试调试,我从Parse_Prog_Count获得正确的返回值,然后是ADD,但是当它从搜索者返回到main的最后一次返回时,该值是错误的。
我也尝试首先从ADD捕获值到搜索器以检查值,并且返回值仍然正确。这是我遇到问题的最后一步。 来自zzz的价值似乎有所改变。
答案 0 :(得分:1)
您将wtf声明为堆栈上的局部变量,作用于ADD函数:
char* ADD(char input[], int method, int bytecount){
switch(method){
case 0:
char wtf[2];
char *returner = itoa(Parse_Prog_Count(input), wtf, 10);
return returner;
break;
}
然后在“* returner”中返回指向该堆栈内存的指针,当该函数退出并超出范围时,您的数据也是如此。所以,你的指针现在指向谁知道什么。