gpt4 book ai didi

c - 为什么我的 C 转换方法仍然失败?

转载 作者:行者123 更新时间:2023-11-30 20:21:48 26 4
gpt4 key购买 nike

我正在尝试从 popen pass 转换为 float 作为最终结果。我尝试过以我能找到的各种可能的方式转换为 char,然后转换为 float,但是我使用 printf 看到的输出似乎每次都是错误的。我尝试过使用 tostring 函数,以及使用 printf 函数中的 %s 来返回正确的函数,但是当我尝试转换输出时,这一切似乎都会给我错误的输出。我应该尝试不同的转换方法吗?

这是代码。

  FILE * uname;
char os[80];
int lastchar;
char n;
uname = popen("sudo python ./return63.py", "r");
lastchar = fread(os, 1, 80, uname);
os[lastchar] = "\0";
n = toString(("%s", os));
printf("THE DIRECT OUTPUT FROM PY IS %s", os);
printf("THE DIRECT OUTPUT For n IS %c", n);
float ia = n - 0;
long p = ia - 0;
float dd = p - 0;
printf("Your OS is %f", dd);

PY 的输出是 'THE DIRECT OUTPUT FROM PY IS 63.0' ,这是正确的值,n 的输出是“n IS 的直接输出”

dd 的输出是“您的操作系统是您的操作系统是 236.000000”

函数 tostring 是从一个已回答的问题中提取的,该问题涉及如何从另一个已回答的问题中获取输出。我尝试过使用和不使用此代码。

int toString(char a[]) {
int c, sign, offset, n;

if (a[0] == '-') { // Handle negative integers
sign = -1;
}

if (sign == -1) { // Set starting position to convert
offset = 1;
}
else {
offset = 0;
}

n = 0;

for (c = offset; a[c] != '\0'; c++) {
n = n * 10 + a[c] - '0';
}

if (sign == -1) {
n = -n;
}

return n;
}

最佳答案

toString 返回一个 int,因此存储一个 int 并输出一个 int

int n = toString(os);    // Also removed the obfuscating '("%s", ..)'
printf("THE DIRECT OUTPUT For n IS %d", n);

此外,您的 toString 函数具有未定义的行为,因为 sign 可能会在未初始化的情况下被读取。

if (a[0] == '-') {  // Handle negative integers
sign = -1;
offset = 1;
}
else {
sign = 1;
offset = 0;
}

您有潜在的操作系统缓冲区溢出,并且您没有正确执行操作系统的空终止:

lastchar = fread(os, 1, sizeof(os) - 1, uname);  // Only read one byte less
os[lastchar] = '\0'; // changed from string "\0" to char '\0'

最后,您不会检查输入字符串中的数字,而是接受每个输入(还有“63.0”中的“.”)。您可能想在第一个非数字字符处停止:

for (c = offset; !isdigit((unsigned char)a[c]); c++) {

关于c - 为什么我的 C 转换方法仍然失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41392815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com