strcat有可能失败吗?
如果我们传递一些不正确的缓冲区或字符串,那么它可能会导致内存损坏.但是,除此之外,即使传递的目标字符串是非NULL,此函数也可能返回失败,就像strcat返回NULL一样?如果不是,为什么strcat具有指定的返回类型?
我刚刚提到过strcat作为例子.但是,这个问题适用于许多字符串和内存相关(如memcpy等)函数.我只是想知道其中一些看似"总是成功"的函数背后的原因有返回类型.
AFAIK,extern关键字应该用于声明,并且没有值可以与使用extern关键字声明的变量相关联.但是假设我写了一个类似的声明
extern int i = 10;
Run Code Online (Sandbox Code Playgroud)
编译器是否应标记相同的错误?我看到一些编译器容忍并忽略了这一点?为什么会这样?"C"标准对此有何评价?
编辑:@All,谢谢你的回答.我仍有疑问.假设我有这个变量的定义而没有另一个文件中的extern链接说ac和我在bc中添加这个语句仍然可以让编译器不标记错误吗?它是否会被重新定义?
据我所知,该函数char *strstr(const char *s1, const char *s2);在空终止字符串s1中搜索空终止字符串s2.
假设我传递一个空终止的字符串s2,但是作为s1传递的缓冲区不是空终止的,如果在s1中不存在字符串s2,会发生什么情况呢?函数strstr将继续从s1的起始地址开始搜索s2,直到找到一些'\ 0'.但是,让我们说它根本找不到'\0'?它会访问一些受保护或禁止的内存区域并崩溃吗?
我知道这是一种未定义的行为,但根据您的经验,可能是什么问题?
我正在创建一个接受dictionary1的函数,并检查是否存在任何键作为值dictionary2.
我尝试过使用dictionary2.isdisjoint(dictionary1)但是这对于只检查按键是有效的.
如何在Python中检查键值?