我有一些问题与缓冲区。简而言之,我必须遍历文本文件中的行,其中每行都有由空格分隔的信息,问题是,信息中可以有空格,所以我编写了一个代码来检查字符串的所有空白空格,并检查它是否为分隔符,如果是,但用";"替换它。问题:我把这个写到另一个变量,在那里我使用malloc来分配它的空间,但它结束打印垃圾,有人能指出我什么是错误的代码?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
int i;
char *destination;
char* str = "S:15 B:20 B A:15",letra;
destination = (char *)malloc(strlen(str)*sizeof(char));
for (i=0;i<strlen(str);i++){
printf("%c n",str[i]);
letra = str[i];
if (i == 0){
destination[i] = letra;
}
else if (letra != ' '){
destination[i] = letra;
}
else if (letra == ' ' ){
if (isdigit(str[i-1])){
destination[i] = ";";
}
else{
destination[i] = letra;
}
}
}
printf("%s",destination);
return 0;
}
我是这样做的——一个简单的单向循环,只复制所需的字符,丢弃空格,并在必要的地方插入;
。
存储长度为x的字符串的空间(根据strlen
)是x+1——为额外的结束零增加一个位置。
检查何时插入;
很容易:在最初跳过空格后(如果您的输入字符串以那些开头),但在任何有效文本之前被复制,d
仍将为0。如果不是且遇到空格,则插入;
。
destination
中的最后一个字符也将是;
。可以通过在复制循环#3之前检查,或者在#4结束之前检查(您还需要测试d != 0
)来简单地丢弃它。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main (void)
{
int i, d;
char *destination;
char *str = "S:15 B:20 B A:15";
destination = malloc(strlen(str)+1);
i = 0;
d = 0;
while (str[i])
{
/* 1. Skip spaces at the start */
while (isspace (str[i]))
i++;
/* 2. Do we need to add a ';' here? */
if (d)
{
destination[d] = ';';
d++;
}
/* 3. Copy while not space or -zero- */
while (str[i] && !isspace (str[i]))
{
destination[d] = str[i];
d++;
i++;
}
}
/* 4. Close off. */
destination[d] = 0;
printf ("%sn", destination);
return 0;
}