2016-01-20 93 views
1

我这样做是为了添加一些文字:索引字符数组追加一个字符串

char text[100]; 
strcpy(text, "Hello"); 

char input[] = "random"; 
strncpy(text + strlen(text), input, sizeof(text) - strlen(text)); 

我这样做,它似乎做工精细的ASCII文本。但是我担心指针算术不安全。如果输入是UTF-8会怎么样?

仅供参考,当我做text + strlen(text)我得到一个指向句子的末尾,然后追加到句末。

text => |h|e|l|l|o|NUL||||||....

text + strlen(text) => |NUL|||||.....

+1

为什么不使用'strcat'? – ameyCU

+0

你对utf-8的关注是什么? –

+0

其实我很困惑。我担心“text + 1”不等于文本[1]的情况。 –

回答

2

这就是为什么strcat的存在:

char text[100]; 
strcpy(text, "Hello"); 

char input[] = "random"; 
strcat(text, input); 

为了保证内存敏感的级联防止溢出,请使用以下修改:

char *text; 

    //allocate memory 
    text = (char *) malloc(15); 
    strcpy(text, "Hello"); 


    char input[] = "random"; 

    //reallocate memory 
    text = (char *) realloc(text, strlen(text)+strlen(input) +1); 
    strcat(text, input); 
    free(text); 
+0

如果在''text''缓冲区不够大。如果我用''strncat''我还需要计算出多少空的空间''text''右剩下的? –

+1

请记添加到您的解决方案,主叫功能则负责释放使用后'concat'分配的内存。 – CiaPan

+0

是的,'strcat'简化了任务 - 但它没有进行大小测试,并且可能会溢出目标数组,与OP的方法相反。 – CiaPan