所以我创建了一个程序,该程序基本上可以打印任何给定的字符串,如下所示:
示例: 输入:
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;
}
真的会有任何帮助。
答案 0 :(得分:1)
问题出在nova_str
函数中:您在源和目标中使用了相同的索引,因此目标数组仍以initcio
空字节开头,这些空字节由{{1}打印},并在系统上显示为空格。 print_array
将数组初始化为所有零位。
这是一个简单得多的版本:
calloc()
答案 1 :(得分:0)
calloc()将内存设置为零,因此,当print_array()应该为空格时,将在其中打印空字符。将这些空字符替换为空格即可解决此问题,尽管我认为有一种更简单的方法可以实现您要执行的操作。
如果您不希望字母以空格开头,请在print_array()中的printf()之前添加一个if (p[i] == '\0') continue;
。