我正在尝试学习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]);
}
我感谢任何帮助。
答案 0 :(得分:2)
您为'\0'
输入单词stop所写的循环,此时j
已编入'\0'
,然后位于abreviation
函数{{1} } char c = arr[length
始终为c
,而不是单词(\0
)中的最后一个字符。
一个简单的解决方法是更改
arr
到
abreviation(arr[i],j);