gpt4 book ai didi

在 C 中使用 strcpy 将函数中的单词复制到字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 23:28:29 24 4
gpt4 key购买 nike

我正在学习基本的 C 编程类(class),我正在尝试创建一个刽子手游戏。在过去的三个小时里,我一直被一个问题所困扰,但我并没有变得更聪明。

基本上,我创建了一个函数,它从文本文件中随机读取一行,然后将其复制到一个字符串中。之后,我想将该字符串复制到函数外的另一个字符串。这是因为主游戏应该是完全用函数构建的。

这是从文本文件中读取随机单词并将其复制到字符串的函数:

char datorns_val()
{
char ordlista[20];
char valt_ord[20];
int raknare = 0;


srand(time(NULL));
random = rand()%10+0;

ptr_file =fopen("hangman.txt","r");
if (!ptr_file)
{
return 1;
}

while (fgets(ordlista,20, ptr_file)!=NULL)
{
raknare++;
if (raknare == random)
strcpy(valt_ord, ordlista);
}

return valt_ord;
}

完成后,我想将位于 valt_ord 中的单词复制到另一个字符串,这时我不确定该怎么做:

char word[20];
strcpy(word,datorns_val());

我收到两个错误:

从“char”到“const char*”的无效转换

正在初始化“char* strcpy(char*, const char*)”的参数 2

我是在正确的轨道上使用 strcpy() 两次还是我完全迷路了?我在没有函数结构的情况下尝试了我的构建,并且只是一个接一个地输入所有代码并且它有效,如果用一个简单的 char word = valt_ord 替换第二个 strcpy()

谢谢,乔纳森

(对不起,如果我的代码难以理解,我是瑞典人,我的第二语言是英语)

最佳答案

目前您正在返回一个没有多大用处的字符,因为您需要一个比创建它的函数生命周期更长的字符串。您应该为此返回一个动态分配的字符串(使用指针)。

 char* datorns_val()
{
// ... your current code
char *ret_str = malloc(20);
strcpy(ret_str, valt_ord);
return ret_str;
}

在你使用它的最后,你应该在完成时释放它。

 char *result = datorns_val();
// use result
free(result);
result = NULL;

或者,如果您确定调用 datorns_val 的函数是唯一要使用结果的函数,那么我会推荐其他不涉及动态的函数内存分配/取消分配(malloc/free)。将要加载的字符串传递给datorns_val

int datorns_val(char (*str_ptr)[20])   // pointer to an array of 20 chars
{
// use str_ptr after dereferencing it to get back the char array
// say you want to copy "abc" to it
strcpy(*str_ptr, "abc");
return 0; // to denote success, you may return -1 for failure
}

// caller's end
char result[20] = "";
int success = datorns_val(&result); // pass the array by reference

阅读更多关于 arrays and pointers 的信息了解更多关于他们的信息。

关于在 C 中使用 strcpy 将函数中的单词复制到字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20946103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com