#include <stdio.h>
#include <stdlib.h>
char number[5000]="37107287533902102798797998220837590246510135740250\
46376937677490009712648124896970078050417018260538\
.....more numbers.....";
char numbers[100][50];
main()
{
int x,z;
extern char numbers[100][50],number[5000];
for(x=0;x<100;x++)
{
for(z=0;z<50;z++)
{
numbers[x][z]=number[50*x+z];
}
}
printf("%s\n",numbers[0]);
}
所以事情是我有这个代码,并且由于某种原因,数字[0]与数字相同。是不是数字[0]应该是前50个字符。我无法弄清楚这一点。提前谢谢。
答案 0 :(得分:5)
for(x=0;x<100;x++)
{
for(z=0;z<50;z++)
{
numbers[x][z]=number[50*x+z];
}
numbers[x][z+1] ='\0'; //Did you miss this ?
}
答案 1 :(得分:3)
您正在使用numbers[0]
指令打印%s
。这将第一个char
的地址(即类型char *
的值)指向“字符串”的第一个字符:char
的序列以{{{ 1}}。
'\0'
数组包含50个非numbers[0]
'\0'
s,紧接其后(char
)还有另一个非零numbers[1]
。所以char
不知道在哪里停下来。 (从技术上讲,当你将第一个数组的末尾运行到第二个数组时,这会导致未定义的行为,但实际上,C系统只会继续运行。)
请注意,如果将所有50 %s
s设置为非零值,则char
字节没有余地。您需要预留51 '\0'
个来保存50个可打印的char
和最后的char
。或者,您可以使用C字符串以外的结构,例如count-array('\0'
和memcpy
处理的事物),但除非您想允许memcmp
字节在你的'\0'
数组中,这通常太多了。