我试图弄清楚为什么C会这样做。这是一个非常简单的字符串连接代码,但是根据strcat中的内容,我得到了非常不同的输出。
有人能解释一下吗?
// With all declared variables
char * hello = "HELLO";
char * world = "WORLD";
char * space = " ";
char * say_hello(){
char * out = "";
strcat(out,hello);
strcat(out,space);
strcat(out,world);
return out;
}
main(){
puts(say_hello());
}
// outputs "HELLO WORLD"
// With all hello as declared variable
char * hello = "HELLO";
char * say_hello(){
char * out = "";
strcat(out,hello);
strcat(out," ");
strcat(out,"WORLD");
return out;
}
main(){
puts(say_hello());
}
// outputs "HELLOELLOLOELLO"
// With all hello and world as declared variable
char * hello = "HELLO";
char * world = "WORLD";
char * say_hello(){
char * out = "";
strcat(out,hello);
strcat(out," ");
strcat(out,world);
return out;
}
main(){
puts(say_hello());
}
// outputs "HELLOELLOWORLD"
// With all constants
char * say_hello(){
char * out = "";
strcat(out,"HELLO");
strcat(out," ");
strcat(out,"WORLD");
return out;
}
main(){
puts(say_hello());
}
// outputs "HELLO WORLD"
所有的代码都是无效和危险的。
首先,修改字符串文字是允许的,尝试这样做会调用未定义的行为strcat
将修改作为第一个参数传递的字符串,因此不能在那里传递字符串文字(或指向字符串文字的指针)。
其次,"
是一个元素数组{'\0'}
。它不能存储通过连接创建的字符串。您必须分配足够的空间。
请注意,非静态局部数组的生命周期在从函数返回时结束,因此必须动态或静态地分配它们。
动态分配:
#include <stdlib.h>
char * say_hello(){
char * out = calloc(32, sizeof(*out)); /* allocate */
if (out == NULL) exit(1); /* check if allocation succeeded */
strcat(out,hello);
strcat(out,space);
strcat(out,world);
return out;
}
静态分配(警告:这不是线程安全的):
char * say_hello(){
static char out[32];
out[0] = '\0';
strcat(out,hello);
strcat(out,space);
strcat(out,world);
return out;
}
问题内容: 请帮助我理解常量变量和Java变量之间的区别。我对此有些困惑。 问题答案: 常量 是概念,是变量的属性。 是用于声明常量变量的java关键字。 正如其他人所指出的那样,从语义/语言的观点来看, 常量变量 的表达是矛盾的,因此,我们可以争论其正确性。 引用规范,无论如何,我们可以阅读 原始类型的最终变量,并使用编译时常数表达式(第15.28节)进行了初始化,称为 常量变量 。 因此,我想
问题内容: 我已经在Python的Stack Exchange上阅读了很多答案,为什么在类中使用“ self”? 阅读这些答案后,我了解到实例变量对于该类的每个实例都是唯一的,而在所有实例之间共享类变量。 在玩耍时,我发现这段代码给出了输出: 但是,此代码作为输出,在我看来应为: 为什么我运行时类变量没有更新?我没有编程方面的经验,所以请原谅。 问题答案: 类变量 被 实例属性 遮盖 。这意味着在
我遵循了www.patrickvideos.com的java SE教程,在关于“类”的章节中遇到了一个问题 他明确地说,。然而,如果我没有弄错的话,变量本身不能是对象,而只能包含对对象或类实例的引用。那么,
问题内容: 我是Java编程的新手。谁能说出Java中的全局变量和局部变量之间的区别? 问题答案: 您的问题有点困惑,因为您在标题中引用的是static / global,而在问题中引用的是global / local。 变量绑定到一个 类 , 每个类 将有 一个实例 。 类可以具有成员变量,并且该类的 每个实例 将有 一个实例 。 请注意,如果您有多个类加载器,这将变得更加复杂。在这种情况下,您
问题内容: 在Linux内核中,信号量用于为数据的关键部分提供互斥,而Completion变量用于在等待事件的2个线程之间进行同步。为什么不使用信号量进行这种同步呢?使用完成变量比使用信号量有什么优势吗? 问题答案: 您可能要使用补全而不是信号量有两个原因。首先,多个线程可以等待完成,并且可以通过调用来全部释放它们。使信号量唤醒未知数量的线程更为复杂。 其次,如果等待线程要取消分配同步对象,则在使
变量、对象和引用之间到底有什么区别? 例如:它们都指向某种类型,并且它们都必须保存值(当然,除非您有临时的可null类型),但是它们的功能和实现之间有何不同? 例子: 它们有相同的概念,但又有什么不同呢?