Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,代码如何返回字符数组?_C_Arrays_Function_Return_Function Call - Fatal编程技术网

在C语言中,代码如何返回字符数组?

在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] =

我做这个手术有困难。我实际上想创建一个函数,从scanf命令返回一个简单的单词,以便将其调用到主代码中。我知道函数不能正确返回数组,但我看过很多教程,还不理解。为了大学的目的

#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";
不能使用函数的结果初始化声明中的数组,因为函数不能返回数组类型

要将一个数组的内容复制到另一个数组,您需要