gpt4 book ai didi

c - 打印垃圾 [C]

转载 作者:行者123 更新时间:2023-11-30 21:30:41 25 4
gpt4 key购买 nike

我在使用缓冲区时遇到了一些问题。短篇故事,我必须迭代文本文件中的行,其中每一行都有由空格分隔的信息,问题是,信息中可以有一个空格,所以我编写了一个代码来检查所有空格一个字符串并检查它是否是一个sperator,如果是,ut 将其替换为“;”。问题:我将其写入另一个 var,其中我使用 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中的最后一个字符也将是一个。通过在 Copy 循环 #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 ("%s\n", destination);

return 0;
}

关于c - 打印垃圾 [C],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24641568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com