Printing Garbage [C]



我有一些问题与缓冲区。简而言之,我必须遍历文本文件中的行,其中每行都有由空格分隔的信息,问题是,信息中可以有空格,所以我编写了一个代码来检查字符串的所有空白空格,并检查它是否为分隔符,如果是,但用";"替换它。问题:我把这个写到另一个变量,在那里我使用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;
}

相关内容

  • 没有找到相关文章

最新更新