【发布时间】:2020-11-10 14:36:28
【问题描述】:
我不明白为什么strlen() 只为第一个字符串提供错误值(即:9)。之后,这些值就会正确出现。
#include <stdio.h>
#include <string.h>
int main() {
int m, i, j;
i = 2;
j = 5;
char a[i][j];
for (i = 0; i <= 2; i++) {
scanf("%s", a[i]);
}
m = strlen(a[0]);
printf("%d\n", m); //here the problem is coming//
m = strlen(a[1]);
printf("%d\n", m);
m = strlen(a[2]);
printf("%d\n", m);
return 0;
}
输入:
heyman
jack
bro
输出:
9
4
3
【问题讨论】:
-
字符串最多只能有
4个字符,因为j == 5。 -
heyman写入越界。 -
@fly_high
j=5会给你 5 个字符来写,从0到4,但字符串需要在末尾有一个额外的字符\0否则C没有不知道字符串实际上已经结束了。这意味着你必须从你的最大长度中减去1来解释这个终结符\0 -
@fly_high
a[5]表示您有可用的位置a[0], a[1], a[2], a[3], a[4],即5空格,而不是数组将上升到a[5] -
行和列是一样的。数组
a[2]只有 2 个元素,索引为0..1。
标签: c input string-length strlen