我编写了这样的函数,当参数x
是偶数时它不能正常工作,例如,如果我在main中键入printf("%s",maxCharac(2))
它将打印“aa”和一个额外的旁边的字符,但奇数可以正常工作。
char *maxCharac(int x)
{
char *str=(char*)malloc(sizeof(char)*x);
for(int i=0;i<x;i++)
{
str[i]='a';
}
return str;
}
答案 0 :(得分:3)
C中的字符串需要在结尾处以NUL('\0'
)字符终止,因此您总是需要分配一个额外的空间来存储它。以下是您的代码已更正以解决此问题。
char *maxCharac(int x)
{
char *str=malloc(sizeof(char)*(x+1));
for(int i=0;i<x;i++)
{
str[i]='a';
}
str[x]='\0';
return str;
}
答案 1 :(得分:1)
您正在尝试将字符数组作为字符串输出(由零字符终止的字符序列),而数组不包含字符串。
要么输出固定数量的字符数组元素。或者你应该在字符数组中存储一个字符串。
例如
#include <stdio.h>
#include <stdlib.h>
char *maxCharac(int x)
{
char *str=(char*)malloc(sizeof(char)*x);
for(int i=0;i<x;i++)
{
str[i]='a';
}
return str;
}
int main(void)
{
const int N = 10;
for ( int i = 1; i < N; i++ )
{
char *s = maxCharac( i );
printf( "%*.*s\n", i, i, s );
free( s );
}
return 0;
}
程序输出
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
或者
#include <stdio.h>
#include <stdlib.h>
char *maxCharac(int x)
{
char *str=(char*)malloc(sizeof(char)*x + 1);
int i = 0;
for ( ; i < x; i++ )
{
str[i]='a';
}
str[i] = '\0';
return str;
}
int main(void)
{
const int N = 10;
for ( int i = 1; i < N; i++ )
{
char *s = maxCharac( i );
printf( "%s\n", s );
free( s );
}
return 0;
}
程序输出
a
aa
aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
aaaaaaaa
aaaaaaaaa
答案 2 :(得分:0)
如@Chris Turner所述,您应该使用\0
或者,您也可以使用calloc
来分配内存而不是malloc
,因为calloc
通过将其设置为零来返回内存