以特定格式打印字符串

时间:2020-05-04 17:35:08

标签: c arrays string pointers

所以我创建了一个程序,该程序基本上可以打印任何给定的字符串,如下所示:

示例: 输入:

Hello

输出:

Hello
ello
llo
lo
o

问题是,由于某种原因,如果我使用icdiff并将我的输出与文本文件中的输出进行比较,它表明我缺少元素,并且我有更多的空格。

Icdiff输出:

Hello
 ello
  llo

如您所见,这与我所拥有的明显不同,但是如果我在终端上对其进行测试,则会得到预期的输出。

程序:

#include <stdio.h> 
#include <stdlib.h>
#include <string.h>

void print_array(char *p, int tamanho) {
    int i;
    for (i = 0; i < tamanho; i++) {
        printf("%c", p[i]);
    }
    printf("\n");
}

void nova_str(char *p, char *s, int inicio, int tamanho) {
    int i;
    for (i = inicio; i < tamanho; i++) {
        s[i] = p[i];
    }
}

int main() {
    char p[1001];
    int len;
    int j;
    scanf("%s", p);
    len = strlen(p);
    print_array(p, len);
    for (j = 1; j < len; j++) {
        char *np = (char *)calloc(len + 1, sizeof(char));
        nova_str(p, np, j, len);
        print_array(np, len);
        free(np);
    }
    return 0;
}

真的会有任何帮助。

2 个答案:

答案 0 :(得分:1)

问题出在nova_str函数中:您在源和目标中使用了相同的索引,因此目标数组仍以initcio空字节开头,这些空字节由{{1}打印},并在系统上显示为空格。 print_array将数组初始化为所有零位。

这是一个简单得多的版本:

calloc()

答案 1 :(得分:0)

calloc()将内存设置为零,因此,当print_array()应该为空格时,将在其中打印空字符。将这些空字符替换为空格即可解决此问题,尽管我认为有一种更简单的方法可以实现您要执行的操作。

如果您不希望字母以空格开头,请在print_array()中的printf()之前添加一个if (p[i] == '\0') continue;

相关问题