#include <stdio.h>
#include <string.h>
#include <math.h>
int main ()
{
char buf[] ="14:15:43";
int i;
char *p;
int *array[3];
i = 0;
p = strtok (buf,":");
while (p != NULL)
{
array[i++] = p;
p = strtok (NULL, ":");
}
for (i=0;i<3; ++i) {
//printf("%s\n", array[i]);
array[i] = array[i] * 2;
}
return 0;
}
当我编译上面的代码时,我收到此错误:
split.c: In function ‘main’:
split.c:16:16: warning: assignment from incompatible pointer type
array[i++] = p;
^
split.c:21:25: error: invalid operands to binary * (have ‘int *’ and ‘int’)
array[i] = array[i] * 2;
^
答案 0 :(得分:3)
关于error
在您的代码中,array[i]
的类型为int *
,不能用作乘法运算符的操作数。
引用标准,章节§6.5.5,乘法运算符
每个操作数都应具有算术类型。
~~~~ 见注释 ~~~~~
关于warning
那就是说,
array[i++] = p;
看起来非常错误。 array[n]
的类型为int *
,p
的类型为char *
,且它们不是兼容的类型。你可能想再次检查你的逻辑。
<强>解决方案强>
看起来,您希望对字符串内容的 numeric 值执行算术运算。仅供参考,只需将char *
转换为int *
,就不会将的字符串内容显示为 int
。
为此,您需要先将字符串转换为算术类型,例如int
或long
。 strtol()
可能是你的帮助。
[注]
算术类型:
引用C11
,章节§6.2.5,
整数和浮点类型统称为算术类型。
答案 1 :(得分:1)
这里有一些错误:
您将数组定义为int *array[3]
,即int *
数组,但您可能想要的是int array[3]
,即int
数组。< / p>
接下来,如其他地方所述,array[i++] = p
无效,因为您尝试将char *
分配给int *
(或int
,如果您是第一个应用第一个修复),这是无效的。您希望使用atoi
将字符串转换为整数array[i++] = atoi(p)
。
最后,printf
循环中注释掉的for
应该使用%d
作为格式说明符而不是%s
,因为数组包含int
。您可能还希望在array[i] = array[i] * 2
之后将其向下移动一行。
通过以上更改,您现在拥有:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main ()
{
char buf[] ="14:15:43";
int i;
char *p;
int array[3];
i = 0;
p = strtok (buf,":");
while (p != NULL)
{
array[i++] = atoi(p);
p = strtok (NULL, ":");
}
for (i=0;i<3; ++i) {
array[i] = array[i] * 2;
printf("%d\n", array[i]);
}
return 0;
}
哪个输出:
28
30
86
答案 2 :(得分:0)
这也可能意味着完全不同的东西。考虑“无效操作数”的含义。我在
上获得它fftout[lochead][i][0] * fftout[lochead][i][0]
当我忘记[i]条款时。我有10个缓冲区,每个缓冲区有4096个元素,每个缓冲区有2个元素。我没有足够的索引。
是的,我只是对数字求平方。它是平方和解调步骤平方根的一部分。