在没有函数帮助的情况下将char添加到string

时间:2013-03-14 02:51:54

标签: c arrays string char append

对于我的程序我需要在不使用标准库或IO函数的情况下将char(char)添加到字符串(char *)。 例如:

char *s = "This is GOO";
char c = 'D';

s = append(s, c);

和s会产生字符串“这很好”。 是否有一些正确的方法来操纵数组以实现这一目标? 此外,用多个字符生成字符串就足够了。 我很确定我可以使用malloc,但不是肯定的......

char * app(char* s, char c){
    char *copy;
    int l = strlen_(s);
    copy = malloc(l+1);
    copy = s;
    copy[l] = c;
    copy[l+1] = '\0';
    return copy;
}

不能使用strcpy

2 个答案:

答案 0 :(得分:1)

没有给出答案,因为这听起来像是课堂作业,这就是你想在高层做的事情:

  1. 确定字符串的长度,即找到'\0'终止符。
  2. 分配一个长一个字符的新char数组。
  3. 将旧字符串复制到新字符串。
  4. 在最后添加新字符。
  5. 确保新字符串末尾有一个'\0'终止符。
  6. (如果您允许修改现有字符串,那么您可以跳过第2步和第3步。但是在您的示例char *s = "This is GOO"s指向不可修改的字符串文字,这意味着您可以' t修改它并且必须使用副本。)


    对您发布的代码的评论:

    char * app(char* s, char c) {
        char *copy;
        int l = strlen_(s);
        copy = malloc(l+1);    /* should be +2: +1 for the extra character and +1 for \0 */
        copy = s;              /* arrays must be copied item by item. need a for loop */
        copy[l] = c;
        copy[l+1] = '\0';
        return copy;
    }
    

答案 1 :(得分:1)

#include <stdlib.h>

char *append(char *s, char c)
{
    int i = 0, j = 0;
    char *tmp;
    while (s[i] != '\0')
        i++;
    tmp = malloc((i+2) * sizeof(char));
    while (j < i)
    {
        tmp[j] = s[j];
        j++;
    }
    tmp[j++] = c;
    tmp[j] = '\0';
    return tmp;
}

int main(void)
{
    char *s = "This is Goo";
    char c = 'D';
    s = append(s, c);
    return 0;
}