我编写了一些代码来解析XML文件,并希望打印它的字符,但每个字符似乎都会调用characters()三次回调函数.
码:
def characters(self,chrs):
if self.flag==1:
self.outfile.write(chrs+'\n')
Run Code Online (Sandbox Code Playgroud)
xml文件:
<e1>9308</e1>
<e2>865</e2>
Run Code Online (Sandbox Code Playgroud)
输出如下,很多空行.
9308 865
我认为它应该像:
9308 865
为什么有空间线?我读了文档信息:
人物(自我,内容)
接收字符数据的通知.解析器将调用此方法来报告每个字符数据块.SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块; 但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息.
所以SAX会将一个字符区域作为几个片段处理?和回调几次?
我刚刚创建了两个文件来测试内联函数的链接,第一个
#include <iostream>
using namespace std;
inline int f1(int a,int b){
a=a+b;
while(a!=0)
a--;
cout<<"inline";
return a;
}
Run Code Online (Sandbox Code Playgroud)
第二个:
int main(){
extern void f1(int a,int b);
f1(1,2);
}
Run Code Online (Sandbox Code Playgroud)
g ++ frist.cc second.cc
undefined reference to `f1(int, int)'
Run Code Online (Sandbox Code Playgroud)
链接器引发错误,因为我希望内联函数是默认的内部链接,所以结果是正确的.
但是,当我将内联函数的调用函数添加到第一个文件时:
#include <iostream>
using namespace std;
inline int f1(int a,int b){
a=a+b;
while(a!=0)
a--;
cout<<"inline";
return a;
}
int callf1(){
f1(10,2);
}
Run Code Online (Sandbox Code Playgroud)
并再次编译,它通过,并且可以无误地运行,所以我想问这里发生了什么?
这是命令:
# ls >log 2>&1 &
[1] 24274
Run Code Online (Sandbox Code Playgroud)
现在我希望这一行[1] 24274重定向另一个文件.有任何想法吗?
以下代码我们总是使用,没关系,
while(int c=getchar() != 'q');
Run Code Online (Sandbox Code Playgroud)
但如果将int更改为如下所示的指针,则编译将出现错误.
#include <stdio.h>
int main(){
int* c=0;
if(int* a =c !=0)
printf("ok");
}
error: cannot convert `bool' to `int*' in assignment
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?似乎优先事项已经改变.任何人都可以给我一个提示.如果我改变它,它会工作.
#include <stdio.h>
int main(){
int* c=0;
int* a;
if((a =c) !=0)
printf("ok");
}
Run Code Online (Sandbox Code Playgroud) 我编写这段代码来切换两个没有临时存储的值,它运行良好,但是当我尝试使用相同的样式来做其他事情时,它不能像我预期的那样工作.
`
#include <iostream>
using namespace std;
int main(){
int i=100,j=200;
//expect swich i and j
i=j+i-(j=i);
cout<<i<<" "<<j<<endl;
//expect j=100 and i=300
i=j+(j=i);
cout<<i<<" "<<j<<endl;
}
Run Code Online (Sandbox Code Playgroud)
结果是:
200 100
400 200
Run Code Online (Sandbox Code Playgroud)
那么为什么第二个(j=i)工作呢?
我们可以就这种情况进行讨论吗?没有人会维护这样的代码,包括我.