将char附加到C数组

时间:2016-11-14 22:24:12

标签: c arrays pointers

我有一个声明如下的字符串:

char *mode_s = (char *)calloc(MODE_S_LEN, sizeof(char));

如何在数组末尾添加char?

3 个答案:

答案 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;

//在循环中,您可以根据需要添加任意数量的字符。您还可以一次添加多个字符,但只能在新位置分配一个