char *placeDelimiter(char message[], int maxSize) {
int msgSize = strlen(message); //length of message
int delSize = (msgSize/maxSize);//how many delimiters are needed
int remSize = msgSize%maxSize; //remainder characters
int newSize = msgSize+delSize; //new size of message
if (remSize==0) delSize--; //if there are no remainders remove , from end
char *temp = (char *)malloc(newSize+1);
int delPos = 0;
int spacing = 0;
for (int x=0;x<msgSize;x++) {
if (delPos==maxSize) {
temp[x] = ',';
delPos=0;spacing++;
} else {delPos++;}
temp[x+spacing] = message[x];
printf("Char: %c DelPos: %d Spacing: %d\n", temp[x], delPos, spacing);
}
temp[msgSize] = '\0';
return temp;
}
上面是一个函数,它为每个设定数量的字符放置一个分隔符(maxSize
)
当"This is a message"
等输入中的函数与4
的{{1}}一起提供时,输出应为maxSize
。但是有一个问题是在循环期间给出空字符,这显然是字符数组的结尾
我在循环中添加了printf以在过程中提供更多信息,这是给出的输出:
"This, is ,a me,ssag,e"
第二个逗号后面的字符为空,我找不到它的原因。有没有人有任何想法?
答案 0 :(得分:1)
此代码存在两个问题。一个
temp[x] = ',';
应该是:
temp[x + spacing] = ',';
因为如果条件为假,那就是角色的位置。
两个,是我在评论中谈到的NUL:
temp[msgSize] = '\0';
应该是:
temp[msgSize + spacing] = '\0';
IMO,如果您使用两个索引变量而不是偏移量,则会更容易理解。类似的东西:
for (x = 0, y = 0; x < msgSize; ++x, ++y)
{
if (...)
temp[y++] = ',';
temp[y] = message[x];
}
temp[y] = '\0';
PS:您应该尝试使用调试器,它会让事情变得更容易......