将int复制到一个字符串

时间:2016-09-30 22:12:51

标签: c string

我正在尝试学习c并因此解决这个exercise。我的问题在于我必须缩写一个单词的部分。我使用sprintf将整数转换为字符串并将其写入我的旧字符串。但是,无论我尝试实现它,字符串的最后一个字符总是丢失。为什么会这样?这是代码:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

void abreviation(char *arr,int length){
    if ( length+1 > 10){
        char c = arr[length];
        sprintf(arr+1, "%d%c", length-1,c);
    }
}

int main() {
    int n,i,j;
    scanf("%d\n",&n);
    char **arr = malloc(n*sizeof(char*));
    for(i=0; i < n ; i++){
        arr[i] = malloc(sizeof(char)*100);
        char c;
        for ( j=0; (c = getchar()) != '\n' ; j++)
            arr[i][j]=c;
        arr[i][j+1]='\0';
        abreviation(arr[i],j);
    }
    for(i=0; i < n; i++)
        printf("%s\n", arr[i]);

}

我感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您为'\0'输入单词stop所写的循环,此时j已编入'\0',然后位于abreviation函数{{1} } char c = arr[length始终为c,而不是单词(\0)中的最后一个字符。

一个简单的解决方法是更改​​

arr

abreviation(arr[i],j);