- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习基本的 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/
请解释以下程序中发生了什么。 我在程序的开头和结尾检查了 strerror(errno) 返回的地址,并确认它每次都返回相同的地址。然后一旦确定这一点,在第一种情况下我继续将相同的地址分配给 ptr,
我正在尝试使用指针将字符串 str 复制到 str 中。我认为这可以使用单个指针本身来实现。每当我运行我的代码时,我都会显示 str1 但带有过多不需要的垃圾字符。请帮忙。提供一些见解 #includ
长话短说,我正在制作这款 3D OpenGL 构建器游戏。细节并不重要,但这是我的问题。我有这个字符串数组: char building_category_names_UPPER_CASE[][30]
我想使用 strcpy 将我所有的参数连接成一个字符指针。我正在这样做,但我的输出只是一个空格。 我使用了 3 个变量:'concat'(应该是我的输出)、'size' 来获取所有参数的长度和'kar
如果我有一个字符串数组 char* q[2]; q[0] = "Hello"; q[1] = "World"; 我想将 q[0] 放入一个新的字符串数组中 char* x[2]; 在 x[0] 中调用
我正在查看一个 strcpy 示例,其中他们增加了一个指针的值,并在 1 行中分配它,如下所示: *ptrA++ = *ptrB++; 我知道char数组中指针指向的值增加了,复制了内容。 c 会做类
我在 C 程序中使用了一个特定的数据结构,我用它来将类型信息附加到值。一个简单的示例如下所示: #include #include #include struct teststruct {
我需要将用户的输入存储到字符串数组中。 #include #include #include char *history[10] = {0}; int main (void) { cha
#include #include int main() { char *str, *temp; str = malloc(sizeof(char) * 100); fge
我有这样一个基本结构 typedef struct struck { char* id; char* mat; int value; char* place; } *T
我有一个以 开头的函数 void findErrors(int lineIndex){ char *line; strcpy(line, lines[lineIndex]); 然后调用另一个函
我运行了以下程序: #include #include #include int main() { char *p, *q; p = (char*)malloc(1); q =
Closed. This question is off-topic。它当前不接受答案。
每次我尝试将字符串插入程序中的二叉树时,我都必须使用 strcpy 并使用 strcpy 的目标才能成功插入。如果我不使用 strcpy 并仅使用源代码,程序将会崩溃。 示例: char *origi
我的代码给我带来了段错误。我调试了一下,执行strcpy时出现错误。该代码尝试从文本文件中提取数据并将其存储到结构数组中。我计划使用 strcpy 将文本文件的数据存储到结构中。知道为什么会发生这种情
#include #include #include char *vStrs[] = {"Max", "Moritz", "Bolte", "Hans Huckebein", "Helene",
我想知道是否有人可以帮助我解决这个段错误,valgrind 和 gdb 指向 strcpy(),但我仍然找不到它.. void listusers(userstat* ptustat) { F
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我有一个关于 strcpy() 的问题。据我了解,我认为 strcpy 复制位于指针处的字节,而不是指针本身。但这段代码似乎 react 不同。 char* str2 = (char*) mallo
我正在开发一个使用 UDP 协议(protocol)传输文件的项目,但是当我使用 strcpy() 将缓冲区复制到另一个字符串时,它总是丢失一些字符。 简单的想法是:我定义了一个结构: struct
我是一名优秀的程序员,十分优秀!