我有一个声明如下的字符串:
char *mode_s = (char *)calloc(MODE_S_LEN, sizeof(char));
如何在数组末尾添加char?
答案 0 :(得分:1)
让我们假设“第一个可用位置”意味着在索引0。
char *mode_s = (char *)calloc(MODE_S_LEN, sizeof(char));
*mode_s='a';
将字符存储在任意索引n处
*(mode_s+n)='b';
使用指针代数,如上所示,相当于
mode_s[n]='b';
人们看到第一种情况只是意味着n = 0。
如果您希望消除递增计数器(如下面的注释中所指定),您可以编写适合您需要的数据结构和支持功能。一个简单的就是
typedef struct modeA{
int size;
int index;
char *mode_s;
}modeA;
支持功能可以是
int add(modeA* a, char toAdd){
if(a->size==a->index) return -1;
a->mode_s[index]=toAdd;
a->index++;
return 0;
}
当添加成功时返回0,当一个空间用完时返回-1。
您可能需要的其他功能可以以类似的方式编码。请注意,由于C不是面向对象的,因此必须将数据结构作为参数传递给函数。
最后,您将代码编写为创建实例的函数
modeA genModeA(int size){
modeA tmp;
tmp.mode_s=(char *)calloc(size, sizeof(char));
tmp.size=size;
tmp.index=0;
return tmp;
}
因此使用它而无需手动递增计数器
modeA tmp=genModeA(MODE_S_LEN);
add(&tmp,'c');
答案 1 :(得分:1)
没有标准功能可以将字符连接到C中的字符串。您可以轻松定义这样的函数:
#include <string.h>
char *strcatc(char *str, char c) {
size_t len = strlen(str);
str[len++] = c;
str[len] = '\0';
return str;
}
此功能仅在str
分配或定义的大小超过其长度+ 1时才有效,即如果其末尾有 space 。在您的示例中,mode_s
的分配大小为MODE_S_LEN
,因此您可以将MODE_S_LEN-1
个字符放入其中:
char *mode_s = calloc(MODE_S_LEN, sizeof(*mode_s));
for (int i = 0; i < MODE_S_LEN - 1; i++) {
strcatc(mode_s, 'X');
}
答案 2 :(得分:-2)
char newchar = 'a'; //or getch() from keyboard
// realloc memory:
char *mode_sNew = (char *)calloc(MODE_S_LEN + 1, sizeof(char));
//复制str:
srncpy(mode_sNew, mode_s, MODE_S_LEN);
//把你的char:
mode_sNew[MODE_S_LEN] = newchar;
//免费旧记忆:
free(mode_s);
//重新分配给旧字符串:
mode_s = mode_sNew;
//在循环中,您可以根据需要添加任意数量的字符。您还可以一次添加多个字符,但只能在新位置分配一个