在C语言中,代码如何返回字符数组?
我做这个手术有困难。我实际上想创建一个函数,从scanf命令返回一个简单的单词,以便将其调用到主代码中。我知道函数不能正确返回数组,但我看过很多教程,还不理解。为了大学的目的在C语言中,代码如何返回字符数组?,c,arrays,function,return,function-call,C,Arrays,Function,Return,Function Call,我做这个手术有困难。我实际上想创建一个函数,从scanf命令返回一个简单的单词,以便将其调用到主代码中。我知道函数不能正确返回数组,但我看过很多教程,还不理解。为了大学的目的 #include <stdio.h> #include <cstring> int function() { char word[100]; scanf("%s", &word); return word; } int main() { char word2[100] =
#include <stdio.h>
#include <cstring>
int function() {
char word[100];
scanf("%s", &word);
return word;
}
int main() {
char word2[100] = function();
}
#包括
#包括
int函数(){
字符字[100];
scanf(“%s”、&word);
返回词;
}
int main(){
char word2[100]=函数();
}
在您的代码中,int function()
,此函数的返回值为int
,但您希望获取字符串,因此请改用char*function()
和,scanf(“%s”和&word)代码>不要对字符数组使用&
代码的示例如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * function () {
char * word = malloc(sizeof(64));
if (!word)
return NULL;
scanf("%s",word);
return word;
}
int main () {
char * word2 = function();
printf("%s\n", word2);
free(word2);
return 0;
}
#包括
#包括
#包括
char*函数(){
char*word=malloc(sizeof(64));
如果(!word)
返回NULL;
scanf(“%s”,单词);
返回词;
}
int main(){
char*word2=函数();
printf(“%s\n”,word2);
免费(word2);
返回0;
}
在您的代码中,int function()
,此函数的返回值为int
,但您希望获取字符串,因此请改用char*function()
和,scanf(“%s”和&word)代码>不要对字符数组使用&
代码的示例如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char * function () {
char * word = malloc(sizeof(64));
if (!word)
return NULL;
scanf("%s",word);
return word;
}
int main () {
char * word2 = function();
printf("%s\n", word2);
free(word2);
return 0;
}
#包括
#包括
#包括
char*函数(){
char*word=malloc(sizeof(64));
如果(!word)
返回NULL;
scanf(“%s”,单词);
返回词;
}
int main(){
char*word2=函数();
printf(“%s\n”,word2);
免费(word2);
返回0;
}
因此,主要问题是函数不能返回数组类型,并且不能使用=
操作符将一个数组的内容复制到另一个数组。C中的数组不同于其他类型
除非它是sizeof
或一元&
运算符的操作数,或用于初始化声明中字符数组的字符串文字,否则类型为“T
的N元素数组”的表达式将转换为(“衰减”)类型为“指向T
的指针”的表达式表达式的值是第一个元素的地址。所以当你写作的时候
return word;
它被解释为
return &word[0]; // return char *
由于word
是函数的本地指针,因此当function
退出时,它就不存在了,因此返回的指针无效
有三种解决方法:
声明word
为static
:
char *function( void )
{
static char word[100];
scanf( "%s", word ); // no & operator here
return word; // return char *
}
char *function( void )
{
char *word = malloc( sizeof *word * 100 );
scanf( "%s", word ); // again, no & operator
return word;
}
void function( char *word, size_t size )
{
scanf( "%s", word );
return word;
}
将数组声明为静态
意味着它存在于程序的整个生命周期中,而不仅仅是该函数。这是可行的,但它限制了函数的实用性,因此不推荐使用
动态分配阵列:
char *function( void )
{
static char word[100];
scanf( "%s", word ); // no & operator here
return word; // return char *
}
char *function( void )
{
char *word = malloc( sizeof *word * 100 );
scanf( "%s", word ); // again, no & operator
return word;
}
void function( char *word, size_t size )
{
scanf( "%s", word );
return word;
}
这比使数组静态
要好,但现在必须确保在使用完数组后释放该数组
将目标数组作为参数传递给函数:
char *function( void )
{
static char word[100];
scanf( "%s", word ); // no & operator here
return word; // return char *
}
char *function( void )
{
char *word = malloc( sizeof *word * 100 );
scanf( "%s", word ); // again, no & operator
return word;
}
void function( char *word, size_t size )
{
scanf( "%s", word );
return word;
}
这是我首选的方法,但在这种特殊情况下,您最好直接调用scanf
这涵盖了函数端,让我们来处理调用方
数组声明的唯一有效初始值设定项是大括号内的值序列:
char word[100] = {'H', 'e', 'l', 'l', 'o', 0 };
或者,对于字符数组,使用带引号的字符串:
char word[100] = "Hello";
不能使用函数的结果初始化声明中的数组,因为函数不能返回数组类型
要将一个数组的内容复制到另一个数组,您需要使用strcpy
(对于字符串,这是带有终止符0
)的char
数组)或memcpy
(对于所有其他数组类型),您不能在声明中这样做
如果只需将一个单词读入数组,只需绕过函数
,直接调用scanf
:
int main( void )
{
char word[100];
scanf( “%s”, word );
// do stuff with word
}
因此,主要问题是函数不能返回数组类型,并且不能使用=
操作符将一个数组的内容复制到另一个数组。C中的数组不同于其他类型
除非它是sizeof
或一元&
运算符的操作数,或用于初始化声明中字符数组的字符串文字,否则类型为“T
的N元素数组”的表达式将转换为(“衰减”)类型为“指向T
的指针”的表达式表达式的值是第一个元素的地址。所以当你写作的时候
return word;
它被解释为
return &word[0]; // return char *
由于word
是函数的本地指针,因此当function
退出时,它就不存在了,因此返回的指针无效
有三种解决方法:
声明word
为static
:
char *function( void )
{
static char word[100];
scanf( "%s", word ); // no & operator here
return word; // return char *
}
char *function( void )
{
char *word = malloc( sizeof *word * 100 );
scanf( "%s", word ); // again, no & operator
return word;
}
void function( char *word, size_t size )
{
scanf( "%s", word );
return word;
}
将数组声明为静态
意味着它存在于程序的整个生命周期中,而不仅仅是该函数。这是可行的,但它限制了函数的实用性,因此不推荐使用
动态分配阵列:
char *function( void )
{
static char word[100];
scanf( "%s", word ); // no & operator here
return word; // return char *
}
char *function( void )
{
char *word = malloc( sizeof *word * 100 );
scanf( "%s", word ); // again, no & operator
return word;
}
void function( char *word, size_t size )
{
scanf( "%s", word );
return word;
}
这比使数组静态
要好,但现在必须确保在使用完数组后释放该数组
将目标数组作为参数传递给函数:
char *function( void )
{
static char word[100];
scanf( "%s", word ); // no & operator here
return word; // return char *
}
char *function( void )
{
char *word = malloc( sizeof *word * 100 );
scanf( "%s", word ); // again, no & operator
return word;
}
void function( char *word, size_t size )
{
scanf( "%s", word );
return word;
}
这是我首选的方法,但在这种特殊情况下,您最好直接调用scanf
这涵盖了函数端,让我们来处理调用方
数组声明的唯一有效初始值设定项是大括号内的值序列:
char word[100] = {'H', 'e', 'l', 'l', 'o', 0 };
或者,对于字符数组,使用带引号的字符串:
char word[100] = "Hello";
不能使用函数的结果初始化声明中的数组,因为函数不能返回数组类型
要将一个数组的内容复制到另一个数组,您需要