我试图创建一个函数,返回一个零数组我们一个char数组 并在文件文本中打印此数组,但是当我返回一个字符串时,返回了一个额外的字符
这是程序写的文本文件字符串
这是我的功能:
char *zeros_maker (int kj,int kj1)
{
char *zeros;
zeros = (char *) malloc(sizeof(char)*(kj-kj1));
int i;
for(i =0;i<kj-kj1;i++)
zeros[i]='0';
printf("%s\n",zeros);
return zeros;
}
我在文件中打印时使用的指令
fprintf(pFile,"%c%s%c &",34,zeros_maker(added_zeros,0),34);
提前致谢
答案 0 :(得分:2)
let video = document.querySelector('video');
let close = document.querySelector('.close');
close.onclick = () => {
video.pause();
}
是用于数字零的编码值。这不是允许使C标准值为0。
您需要在'0'
数组的末尾添加NUL终结符'\0'
,以使char
函数正常工作。
否则,您可能会遇到运行超出printf
数组末尾的风险,结果不明确。
最后,不要忘记在程序的某个时刻char
分配内存。
答案 1 :(得分:0)
Read about how string in C
are meant to be terminated。
每个字符串都以null
char '\0'
终止(NULL符号ASCII值为0,不要与具有ASCII值'0'
的char 48
混淆。 标识字符串的结尾。
zeros[kj-kj1]='\0';
如果您正在访问一个超出范围的元素,请务必检查。在这种情况下,如果kj1> kj
答案 2 :(得分:0)
您可以获得memset
。
char* zeros_maker(int kj,int kj1)
{
int len=kj-kj1;
char *zeros=malloc(sizeof(char)*(len));
memset(zeros,'0',len-1);
zeros[len-1]=0;
printf("%s\n",zeros);
//fflush(stdout);
return zeros;
}
或者,如果您不是C风格字符串的粉丝,并且它只是ASCII,也可以使用以下内容。小心你正在这样做。
char* zeros_maker_pascal_form(int kj,int kj1)
{
int len=kj-kj1;
char *zeros=malloc(sizeof(char)*(len));
memset(zeros,'0',len);
for(int a=0;a<len;a++){
printf("%c",zeros[a]);
}
printf("\n");
//fflush(stdout);
return zeros;
}
答案 3 :(得分:0)
您的代码有一些基本问题,主要问题是它无法终止字符串(并包含终结符的空间)。
这是一个固定和清理的版本:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Click to fade out character by character</button><br><br>
<div>
<span id="A">A</span>
<span id="B">B</span>
<span id="C">C</span>
</div>
这比您的代码有以下改进:
char * zeros_maker(size_t length)
{
char *s = malloc(length + 1);
if(s != NULL)
{
memset(s, '0', length);
s[length - 1] = '\0';
}
return s;
}
没有强制转换价值,malloc()
也没有缩放,因为我认为这毫无意义。sizeof (char)
返回的NULL
。malloc()
将字节范围设置为单个值,这是一个标准的C函数,比自定义循环更容易知道和验证。这样称呼:
memset()
完成后,请记住char *zs = zeros_maker(kj - kj1);
puts(s);
free(s);
字符串。