我多次调用返回char值的函数时遇到问题。 我想将该函数的返回值重新分配给另一个函数中的char变量。 这是调用函数init_current()的函数代码:
int current_live_read(int *current)
{
char ainpath[33];
ainpath[33]=init_current();
char *filename = ainpath;
int curr;
FILE *file = fopen(filename, "r");
fscanf(file, "%4d", &curr);
if(!feof (file))
{
}
fclose(file);
*current=curr;
return(0);
}
在此函数中,我将调用函数init_current()。当我第一次调用它时,我具有正确的ainpath [33]变量返回值。但是,当我第二次调用current_live_read(int * current)时,在fscanf中出现错误时,第二次调用后,变量ainpath [33]为“ Name:ainpath 详细信息:“ \ 0”,“ \027Î001\0Túÿ¾\ 0 \037ã\ 225r.16 \ 0 \ 0 \ b \ 0” 默认值:0xbefffa28 小数:-1090520536 ”,这肯定是不正确的。我认为我需要以某种方式释放数组ainpath [33],但我不知道如何。
这是init_current()的代码:
char init_current(void)
{
system("sudo echo cape-bone-iio > /sys/devices/bone_capemgr.*/slots"); //Init ADC
system(AINpath);
//int file;
char ainpath[33];
char *filename = "/root/LED_Tester_V1/CurrentRead/pathbuf";
char * buffer = 0;
long length;
FILE * f = fopen (filename, "rb");
if (f)
{
fseek (f, 0, SEEK_END);
length = ftell (f);
fseek (f, 0, SEEK_SET);
buffer = malloc (length);
if (buffer)
{
fread (buffer, 1, length-1, f);
}
fclose (f);
}
if (buffer)
{
sprintf(ainpath, "%s%d", buffer, AIN);
}
return(ainpath);
}
答案 0 :(得分:0)
这里有很多错误。
data= pd.merge(data, cont, how='left', on=['DateOfOutage','Tech','Sites'])
MTTR WhiteList DateOfOutage Vendor Tech Sites id Contribution
25 FALSE 2019-08-01 00:00:00 ERICSSON 2G UPP5975 5975 0.0000 %
18 FALSE 2019-08-02 00:00:00 ZTE 3G UPP5975 5975 0.0000 %
17733 FALSE 2019-08-03 00:00:00 ERICSSON 3G UPP5806 5806 0.0000 %
17730 FALSE 2019-08-04 00:00:00 ERICSSON 3G UPP5806 5806 0.0000 %
3419 FALSE 2019-08-01 00:00:00 ZTE 2G UPP2347 2347 0.0000 %
10 FALSE 2019-08-02 00:00:00 ZTE 2G UPP2347 2347 0.0000 %
4 FALSE 2019-08-03 00:00:00 ZTE 2G UPP2347 2347 0.0249 %
1 FALSE 2019-08-04 00:00:00 ZTE 2G UPP2347 2347 0.0000 %
1 FALSE 2019-08-01 00:00:00 ZTE 2G UPP2347 2347 0.0000 %
1 FALSE 2019-08-02 00:00:00 ZTE 2G UPP2326 2326 0.0000 %
5 FALSE 2019-08-03 00:00:00 ZTE 2G UPP2326 2326 0.0000 %
3 FALSE 2019-08-04 00:00:00 ZTE 2G UPP2326 2326 0.0000 %
您正在将指针返回到本地数组,该数组将在函数退出时销毁。而是分配更多的内存:
return(ainpath);
然后将其写入buffer = malloc(length+10); // I don't know what AIN is, but it has to fit!
而不是buffer
并返回它,因为它在函数调用之间仍然存在。
ainpath
由于我们要返回一个指针,因此if (buffer)
{
sprintf(buffer, "%s%d", buffer, AIN);
}
return buffer; // return the malloc'd buffer here
应该定义为(请注意init_current
):
*
最后,
char *init_current(void)
{
...
不执行您认为的操作。它采用ainpath[33]=init_current();
返回的值(它是一个指针),并将其存储到init_current()
中的第34个字符中,这可能不是您想要的。改用指针:
ainpath