1

对于我的程序,我需要在不使用标准库或 IO 函数的情况下将 char(char) 添加到 string(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

4

2 回答 2

1

在不透露答案的情况下,因为这听起来像是课堂作业,所以这是您想要在高层次上做的事情:

  1. 确定字符串的长度,即找到'\0'终止符。
  2. 分配一个长一个字符的新 char 数组。
  3. 将旧字符串复制到新字符串。
  4. 在末尾添加新字符。
  5. 确保'\0'在新字符串的末尾有一个终止符。

(如果您被允许修改现有字符串,那么您可能会跳过第 2 步和第 3 步。但在您的示例char *s = "This is GOO"s指向不可修改的字符串文字,这意味着您无法就地修改它并且必须使用副本。 )


对您发布的代码的评论:

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;
}
于 2013-03-14T02:59:27.313 回答
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;
}
于 2013-03-14T03:14:27.243 回答