【发布时间】:2020-05-22 02:30:26
【问题描述】:
#include <stdio.h>
#include<string.h>
int main() {
char a[50],b[50];// same sized arrays
for(int j =0;j<50;j++){
b[j]='b';a[j]='a';// initializing with the same number of elements
}
printf("the size of a is %ld,",strlen(a));
printf("the size of B is %ld",strlen(b));
return 0;
}
输出是
a的大小是50, B的大小是54
但我期望的是 a 的大小是 50 B的大小是50
这里有什么问题?
【问题讨论】:
-
a和b不是 字符串,因为它们都缺少strlen()要求的 null 字符。 -
我也想到巧合,试了好几次。
-
@isrnick - 我同意这是未定义的行为。
-
大小为
N的数组最多可以存储一个包含N-1非空字符加上表示字符串结束的空字符的字符串。因此,由于您的数组大小为 50,因此您的 for 循环应该上升到j<49,并且在循环之后应该将空字符分配到两个数组b[49]='\0'; a[49]='\0';中的第 49 位。