c - C字符串数组,分配和传递等
问题描述
我一直在重新思考我的提问方式。所以我编辑了这个问题。
我事先知道数组中有多少个字符串,因为它是菜单文本。假设我有一个这样声明的字符串数组:char *menu_item[4];
这应该给我一个可以容纳 4 个字符串的数组,对吗?
我希望能够将字符串数组传递给其他函数,这是这样做的方法吗?
此数组未在 main 中声明。但是在从 main 调用的函数中。
我是否必须分配内存才能使用 fx
strcpy(menu_item[1],"some text");
,如果是的话。我应该分配什么?还是menu_item[0] = "some text"
可以??我在函数中有一个函数可以打印出以 a
char *string
作为参数的字符串。并且函数本身采用一个字符串数组,因此char *items[]
它看起来像这样:void scroll_menu(char *items[], int size){ for(int i = 0; i < size; i++){ print_out(items[i]); } }
字符串数组的参数是否正确?
我一直在网上浏览很多问题。并且似乎找不到任何可以解决我问题的东西。
如果有任何疑问,我会回顾一下我想要的:
- 我想声明一个包含已知数量的字符串的字符串数组。有时可以在数组的声明中初始化字符串。其他时候我必须在某个地方查找,然后“分配”或将结果复制到数组中。
- 我希望能够从返回
char *string
类似的函数中复制或分配字符串strcpy(menu_item[0], some_function_returning_string());
我的问题是我尝试了很多不同的东西,以至于我感到困惑。并误解了字符串数组的操作。
我也尝试过char menu_items[4][20];
,然后strcpy(menu_items[0], "some text");
没有任何运气。然后是如何使函数接受这样声明的数组的问题。
关于如何完成我想要的任何建议都会非常好。
编辑
我花了一些时间阅读 c 编程书籍并找到了我想要的东西。如果我声明一个指向字符串的指针数组,那么char *menu_items[4]
我将有一个可以接受 4 个指向字符串或字符数组的指针的数组char *string
如果我想从返回 a 的函数中分配一个字符串,char *
我有一个函数:
char *function_returning_string(int x){
static char *strings[3] = {"this","is","strings"};
if(x <= 2){
return strings[0];
}
else if(x > 2){
return string[1];
}
else{
return strings[2];
}
}
我调用这个函数的代码我有以下内容:
static char *other_strings = {"yes", "no"};
char *menu_item[3];
menu_item[0] = "ok";
menu_item[1] = other_strings[0];
menu_item[2] = function_returning_string(3);
然后我可以将整个字符串数组传递给以*string_array[]
as 为参数的函数,function_takin_string_array(menu_item);
或者将内部的任何字符串传递给以char *string
as 为参数的函数function_taking_string(menu_item[2]);
代码编译没有错误并且可以工作。如果有人认为代码有问题或误解了某些内容,请告诉我。
解决方案
正如 MFisherKDX 所指出的,这部分代码是不正确的:
static char *addr;
sprintf(addr, "S %d", i + 1);
return addr;
你觉得你回来这里怎么样?它应该在 sprintf() 调用中失败,因为您尝试为未分配的内存分配一些值。它应该是这样的:
static char addr[128];
sprintf(addr, "S %d", i + 1);
return addr;
以及上面提到的 PeterJ_01 如何尝试使用 gdb 来找出问题所在以及您在哪里还有其他错误。
推荐阅读
- vue.js - vuex - 未知的动作类型(无法调度我的动作)
- c# - How to set the index of a combobox that was dynamically added to a datagridview
- c# - 列表视图和组合框的 SelectedItem 颜色
- python - 如何检查一个字典的所有键是否存在于另一个字典中?
- excel - excel中数据量不均匀的插值
- sql - SQL循环表将记录插入新表,然后获取新ID并插入其他表
- javascript - 如何在不知道原始类型的情况下将缓冲区转换为字符串/数字/日期
- javascript - 反应导航抽屉多次更新
- components - 将查询从 index.js 移动到 GatsbyJS 中的组件后,无法读取未定义的属性 'allContentfulBlogPost'(使用 Contenful 和 GraphQL)
- mysql - 过滤 MySQL 中的每一列