C - 不能使用整数来 char* 工作。加1不。有问题

标签 c

这可能是一个菜鸟问题,但我现在正在努力解决这个问题 2 天,但无法让它发挥作用; 我正在向所有软件添加调试日志,但无法解决这个问题。 这里会发生什么? (抱歉可能是菜鸟问题)

这部分简直要了我的命;

#define MAX_LINE_LEN 1000

int hlsconfdata;
hlsconfdata=0;

f = fopen("/data/.hlsconf", "r");
if (!f)
{
    ALOGI("Error opening config file ");
}
else
{
    char line[MAX_LINE_LEN];
    while (fgets(line, MAX_LINE_LEN, f))
    {
        hlsconfdata = (int)line;
        ALOGI("Got HLS config set to: (%s)", (char*)hlsconfdata);
    }
    if (!feof(f))
    {
        ALOGI("Error reading HLS config file ");       
    }
}
fclose(f);  

int count;
count = hlsconfdata + 1;

ALOGI("Processing Config for configuration: (%s)", (char*)hlsconfdata);
ALOGI(">>>>>>>>>>>>>>add 1: (%s)", (char*)count);

if (hlsconfdata == 0)
{
    ALOGI(">>>>>>>>>>>>>>>>>> got 0");
}
else if (hlsconfdata == 1)
{
    ALOGI(">>>>>>>>>>>>>>>>>> got 1");
}
else if (hlsconfdata == 2)
{
    ALOGI(">>>>>>>>>>>>>>>>>> got 2");
}
else if (hlsconfdata == 3)
{
    ALOGI(">>>>>>>>>>>>>>>>>> got 3");
}
else 
{
    ALOGI(">>>>>>>>>>>>>>>>>> got NOTHING");
}

日志输出:

Got config set to: (2) Processing Config for configuration: (2)
>>>>>>>>>>>>>>add 1: ()
>>>>>>>>>>>>>>>>>> got NOTHING

所以hlsconfdata在转换为char时有一个值。 当加 1 或将其作为整数进行比较时,它没有值(或其他值) 有人可以解释一下吗?

请注意,这是添加了 android AOSP 源代码(如果了解这一点很重要的话)。

最佳答案

根据评论,该文件似乎应该包含整数的文本表示形式,并且您希望将其转换为整数。

如果是这样,则更改此:

hlsconfdata = (int)line;
ALOGI("Got HLS config set to: (%s)", (char*)hlsconfdata);

对此:

hlsconfdata = atoi(line);
ALOGI("Got HLS config set to: (%d)", line);

并更改此:

ALOGI("Processing Config for configuration: (%s)", (char*)hlsconfdata);
ALOGI(">>>>>>>>>>>>>>add 1: (%s)", (char*)count);

对此:

ALOGI("Processing Config for configuration: (%d)", hlsconfdata);
ALOGI(">>>>>>>>>>>>>>add 1: (%d)", count);

使用强制转换表明您可能做错了什么。 (int)line的作用是将line内存地址转换为整数。它不会读取存储在 line 中的字符。

您的原始代码似乎部分有效,因为您将 line 的地址存储在 int 中,然后通过转换回 char * 再次检索它,因此 %s 说明符查找 line 的内容。但是,当您对中间的 int 执行 +1 时,您会遇到麻烦,因为您不再检索原始缓冲区(事实上,您可能会检索指向缓冲区第二个字符的指针,从而导致显示的行没有第一个字符)。

<小时/>

另一个问题是您的 while 循环读取整个文件,但它会用下一行覆盖每一行,因此您会显示大量 “Got HLS config set to:” (假设文件有多于 1 行),但您实际上只使用文件的最后一行。

关于C - 不能使用整数来 char* 工作。加1不。有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28426809/

相关文章:

c - vfork() 隐式声明

计算二进制中相邻对的数量

c - 无法从以指针作为参数的函数内的主方法引用指针

c - MSVC 和优化常量表达式

c - 如何获取命令sort的排序矩阵?

c - 根据使用的周期平衡分支

c - 如何检查整个程序是否在ARM上烧录?

你能在 if 条件中使用多个 < 吗?

我可以使用 tun/tap 和原始套接字制作 "TCP packet modifier"吗?

c++ - 将原始内存写入文件