char brr[5][10]={“hello”,“test”,“this”} 求sizeof *brr sizeof **brr sizeof &brr 求strlen brr strlen *brr strlen **brr strlen&brr
时间: 2023-11-24 19:06:12 浏览: 31
sizeof *brr: 10,因为*brr指向brr数组的第一个元素,即一个长度为10的字符数组。
sizeof **brr: 1,因为**brr是指向brr数组第一个元素的第一个字符,即一个字符。
sizeof &brr: 4或8,取决于系统的位数,因为&brr是指向brr数组的指针。
strlen brr: 15,因为brr数组中所有字符串的长度之和为15。
strlen *brr: 5,因为*brr指向brr数组的第一个元素,即"hello",长度为5。
strlen **brr: 1,因为**brr是指向brr数组第一个元素的第一个字符,即"h"。
strlen &brr: strlen(&brr)无法编译通过,因为&brr是指向整个brr数组的指针,而不是一个字符串。
相关问题
int brr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; printf("%d", strlen(brr));
这段代码是错误的,因为strlen函数是用来计算字符串长度的,而brr是一个整型数组,并不是一个字符串,所以无法使用strlen函数计算其长度。正确的做法应该使用sizeof运算符计算整型数组的长度,代码如下:
```c
int brr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int len = sizeof(brr) / sizeof(brr[0]);
printf("%d", len);
```
这样就可以正确输出数组brr的长度了。
#include <stdio.h> #include <string.h> int main() { char arr[1000], brr[1000]; int i = 0, count = 0, sum = 0; scanf("%s", arr); while (i < sizeof(arr)) { if (arr[i] == arr[i + 1]) count += 1; else { if (count == 1) { brr[sum] = arr[i]; sum++; } else { brr[sum] = count; brr[sum + 1] = arr[i]; sum += 2; count = 1; } } } printf("%s", brr); return 0; }检查有无问题
这段代码有几个问题,首先是在输入字符串时没有限制输入长度,可能会导致数组越界;其次是在 while 循环中没有对 i 进行更新,会导致死循环;还有在输出字符串时,如果 brr 数组中有数字,直接输出会被当成 ASCII 码输出,需要对其进行处理。以下是修正后的代码:
```
#include <stdio.h>
#include <string.h>
int main() {
char arr[1000], brr[1000];
int i = 0, count = 1, sum = 0;
scanf("%s", arr);
int len = strlen(arr);
while (i < len) {
if (arr[i] == arr[i + 1]) {
count += 1;
} else {
if (count == 1) {
brr[sum] = arr[i];
sum++;
} else {
brr[sum] = '0' + count;
brr[sum + 1] = arr[i];
sum += 2;
count = 1;
}
}
i++;
}
brr[sum] = '\0';
printf("%s", brr);
return 0;
}
```