在C中定义和打印字符串变量的正确格式是什么?

在C中定义和打印字符串变量的正确格式是什么?,c,string,variables,printf,C,String,Variables,Printf,我是C语言的绝对初学者,我有过一些其他高级语言的经验,如Ruby和Python,但除此之外,我还是一般编程的初学者。我一直在试图找出如何定义一个字符串变量,并使用类似“printf”函数的东西来打印它,但到目前为止,我没有运气,因为我的代码只是不断地发出错误消息 据我所知,类似这样的内容应该定义一个字符串变量,然后将其打印到控制台: char string[3]; string = "hi"; printf ("%s", string); 但是这不起作用,那么正确的方法是什么呢?这不起作用,因

我是C语言的绝对初学者,我有过一些其他高级语言的经验,如Ruby和Python,但除此之外,我还是一般编程的初学者。我一直在试图找出如何定义一个字符串变量,并使用类似“printf”函数的东西来打印它,但到目前为止,我没有运气,因为我的代码只是不断地发出错误消息

据我所知,类似这样的内容应该定义一个字符串变量,然后将其打印到控制台:

char string[3];
string = "hi";
printf ("%s", string);

但是这不起作用,那么正确的方法是什么呢?

这不起作用,因为在C中不能分配给数组,除非在初始化数组时

因此,您可以:

char string[3] = "hi";
哪一个更好(更安全)写为:

char string[] = "hi";
这会让编译器担心字符数,这通常是可取的

若要在初始化后更改数组内容,必须使用某些可以复制字符的函数,但不能使用单个赋值:

strcpy(string, "yo");

请注意,这是危险的,因为
strcpy()
不会知道数组的3个字符限制。

这不起作用,因为除了初始化数组外,不能在C中为数组赋值

因此,您可以:

char string[3] = "hi";
哪一个更好(更安全)写为:

char string[] = "hi";
这会让编译器担心字符数,这通常是可取的

若要在初始化后更改数组内容,必须使用某些可以复制字符的函数,但不能使用单个赋值:

strcpy(string, "yo");

请注意,这是危险的,因为
strcpy()
不会意识到数组的3个字符限制。

作为问题描述,“不工作”是完全无用的。总是包括你正在得到的错误(正如你所看到的那样)。“不起作用”作为问题描述是完全无用的。总是包括你得到的错误(与你看到的完全一样)。有更安全的功能可以使用吗?或者在重新定义变量时需要小心吗?值得一提的是,将字符串文字指定给指针,我怀疑他就是这么做的meant@nattinthehat有一个名为strncpy(注意“n”)的函数,它接受第三个参数“n”,并将复制“最多n个”字符,您可以像这样使用它
strncpy(字符串,“yo”,3)
。但是,要小心字符串终止空字节。strncpy不会为您检查。是否有更安全的功能可供使用?或者在重新定义变量时需要小心吗?值得一提的是,将字符串文字指定给指针,我怀疑他就是这么做的meant@nattinthehat有一个名为strncpy(注意“n”)的函数,它接受第三个参数“n”,并将复制“最多n个”字符,您可以像这样使用它
strncpy(字符串,“yo”,3)
。但是,要小心字符串终止空字节。strncpy不会为您检查它。