【问题标题】:String from a function in CC中函数的字符串
【发布时间】:2013-12-22 22:33:23
【问题描述】:

目前正在学习一点 c,但我遇到了字符串问题。

我只是想使用函数返回一个字符串。这是一个更大的程序的一部分,该程序应该从外部文件中获取单词,但我想要一个像这样的简单函数来开始。

PS。是的,更大的计划是针对学校的。我不想简单地复制代码,我想理解它。把它扔出去。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char* teststring()
{
    return (char*)"donald duck";
}

int main()
{
    char word[20];

    word = teststring();

    return 0;
}

我尝试了返回字符串的各种变体,但我的问题是我不确定该函数的返回类型以及如何返回它。

这是我遇到的最常见的错误。

[Error] incompatible types when assigning to type 'char[20]' from type 'char *'

我尝试过不同的返回类型,声明和初始化一个 char 数组并返回它,以及我最新的测试类型转换。

提前致谢。

【问题讨论】:

  • 不能分配数组(声明初始化除外)。阅读strcpy
  • char *word;strcpy(word, teststring());

标签: c string function return


【解决方案1】:

数组(更准确地说,数组类型的表达式)不能作为赋值的目标;您不能使用 = 运算符将一个数组的内容复制到另一个数组。

对于字符串,您需要使用strcpystrncpy 函数:

strcpy( word, teststring() ); // assumes word is large enough to hold the
                              // returned string.

对于其他数组,请使用memcpy

【讨论】:

  • 好吧,这似乎是我使用字符串的主要问题。复制而不是分配!因此,在 c 中根本没有办法为数组分配一个函数的值。您必须复制到它或在函数中使用指针?
  • @apelsin:差不多,是的。原因并非完全随意;请参阅this paper,尤其是标题为“胚胎 C”的部分,了解原因。
  • 我明天会读到,我已经深入研究了我的代码,现在已经很晚了。感谢您的帮助。
【解决方案2】:

您最好将const 修饰符添加到函数teststring(),因为它返回一个指向常量字符串的指针。您不能将wordchar[20] 的地址)重新分配给指向常量字符串的指针。必须复制。

#include<string.h>
#include<stdio.h>

const char* teststring()
{
    return "donald duck";
}

int main()
{
    char word[20];

    strcpy(word, teststring());
    printf("%s", word);

    return 0;
}

【讨论】:

  • 谢谢,我在测试中使用了你的功能。我刚刚注意到您在编辑后移动了 *?之前不是 *teststring() 吗?它有什么改变吗?
  • @apelsin 不,这里没有区别。您甚至可以在两者之间放置更多空格,例如 const char * teststring()。编译器知道你的意思:返回一个指向 const 字符串的指针。
【解决方案3】:

嗯,首先我认为这是编译器不喜欢的指针。您不需要使用指针将字符转换为字符串。其次,当您引用单词时,您并没有指定要存储字母的位置。当引用数组中的一个位置时,你必须在你想要的地方写,比如 word[0] 或 word[1]。

由于您正在尝试将字符串转换为 char 数组,因此您应该使用 for 循环将字符串值存储到 char 数组的每个位置。

我不知道学校的问题是什么,或者它有什么规范,但是如果你只是想返回一个字符串,那么为什么不返回一个字符串,然后在你的新函数中将它设置为一个字符串呢?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

string teststring()
{
String str1 = "donald duck";
return str1;
}

int main()
{
string word;

word = teststring();

return 0;
}

【讨论】:

  • 我以为我不能在c中使用String类型?我在尝试时得到了这个:“[Error] unknown type name 'String'”
猜你喜欢
  • 2012-07-16
  • 2012-03-15
  • 1970-01-01
  • 2021-10-21
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
相关资源
最近更新 更多