好吧所以我正在使用android sdk和adt等在eclipse中使用android应用程序,而我正在编译我的代码我遇到了错误我已经绞尽脑汁待了好几天查找类似在发布之前在这里的线程但是我不满意,因为我尝试了类似于我的问题的各种解决方案。
在eclipse中用于编译:
工具链:android GCC
构建器:android builder
GNU C ++
这是我得到的错误:
jni/src/SDL/debugger.cpp:436:21: error: format not a string literal and no format arguments [-Werror=format-security]
printf(m->name);
^
jni/src/SDL/debugger.cpp: In function 'void debuggerMemoryByte(int, char**)':
jni/src/SDL/debugger.cpp:1292:11: error: redeclaration of 'int i'
int i = debuggerReadByte(addr+8);
^
jni/src/SDL/debugger.cpp:1283:13: error: 'int i' previously declared here
for(int i = 0; i < 16; i++) {
^
jni/src/SDL/debugger.cpp: In function 'void debuggerMemoryHalfWord(int, char**)':
jni/src/SDL/debugger.cpp:1328:11: error: redeclaration of 'int i'
int i = debuggerReadByte(addr+8);
^
jni/src/SDL/debugger.cpp:1319:13: error: 'int i' previously declared here
for(int i = 0; i < 16; i++) {
^
jni/src/SDL/debugger.cpp: In function 'void debuggerMemory(int, char**)':
jni/src/SDL/debugger.cpp:1366:11: error: redeclaration of 'int i'
int i = debuggerReadByte(addr+8);
^
jni/src/SDL/debugger.cpp:1355:13: error: 'int i' previously declared here
for(int i = 0; i < 16; i++) {
^
jni/src/SDL/debugger.cpp: In function 'void debuggerOutput(char*, u32)':
jni/src/SDL/debugger.cpp:1403:13: error: format not a string literal and no format arguments [-Werror=format-security]
printf(s);
^
cc1plus.exe: some warnings being treated as errors
make.exe: *** [obj/local/armeabi/objs/main/SDL/debugger.o] Error 1
这里是一些代码示例:
for(int i = 0; i < 16; i++) {
int a = debuggerReadByte(addr);
int b = debuggerReadByte(addr+1);
int c = debuggerReadByte(addr+2);
int d = debuggerReadByte(addr+3);
int e = debuggerReadByte(addr+4);
int f = debuggerReadByte(addr+5);
int g = debuggerReadByte(addr+6);
int h = debuggerReadByte(addr+7);
int i = debuggerReadByte(addr+8);
int j = debuggerReadByte(addr+9);
int k = debuggerReadByte(addr+10);
int l = debuggerReadByte(addr+11);
int m = debuggerReadByte(addr+12);
int n = debuggerReadByte(addr+13);
int o = debuggerReadByte(addr+14);
int p = debuggerReadByte(addr+15);
printf("%08x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
addr,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,
ASCII(a),ASCII(b),ASCII(c),ASCII(d),
ASCII(e),ASCII(f),ASCII(g),ASCII(h),
ASCII(i),ASCII(j),ASCII(k),ASCII(l),
ASCII(m),ASCII(n),ASCII(o),ASCII(p));
addr += 16;
}
} else
debuggerUsage("mb");
}
void debuggerMemoryHalfWord(int n, char **args)
{
if(n == 2) {
u32 addr = 0;
sscanf(args[1], "%x", &addr);
addr = addr & 0xfffffffe;
for(int i = 0; i < 16; i++) {
int a = debuggerReadByte(addr);
int b = debuggerReadByte(addr+1);
int c = debuggerReadByte(addr+2);
int d = debuggerReadByte(addr+3);
int e = debuggerReadByte(addr+4);
int f = debuggerReadByte(addr+5);
int g = debuggerReadByte(addr+6);
int h = debuggerReadByte(addr+7);
int i = debuggerReadByte(addr+8);
int j = debuggerReadByte(addr+9);
int k = debuggerReadByte(addr+10);
int l = debuggerReadByte(addr+11);
int m = debuggerReadByte(addr+12);
int n = debuggerReadByte(addr+13);
int o = debuggerReadByte(addr+14);
int p = debuggerReadByte(addr+15);
似乎也出现了这些错误,无法解析函数'sscanf',无法解析函数'printf'。这让我很烦。
我已经包含了所有的头文件等但不确定从哪里开始我希望有人可以让我知道上述错误的确切情况,并感谢您的帮助。
对我来说,代码看起来是正确的,但不确定它可能出错的地方。
答案 0 :(得分:1)
问题是你要声明变量&#34; int i&#34;两次 -
在创建循环int i = 0
并在其中创建int i = debuggerReadByte(addr+8);
之后。
您可以通过更改其中一个变量的名称来解决此问题,例如for(int z = 0; z < 16; z++)
。
答案 1 :(得分:0)
error: redeclaration of 'int i'
您可以简单地将循环控制变量重命名为其他内容,因为您无论如何都不在循环中使用它。
error: format not a string literal and no format arguments [-Werror=format-security]
您可以使用fputs()
或puts()
(但附加新行IIRC)来避免这种情况。
似乎也出现了这些错误,功能&#39; sscanf&#39;无法解决,功能&gt; printf&#39;无法解决。这让我很烦。
尝试添加<cstdio>
并使用std::
前缀。您的代码段不显示包含。