马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
伟大的鱼油们,学习『带你学C带你飞』第26集,字符串统计的长度,为啥不能作为数组的变量长度?
能不能帮忙解惑,我这样写,怎么会给我报"Segmentation fault"#include <stdio.h>
#define MAX 1024
int main(){
char *str;
printf("请输入一个句子: ");
fgets(str, MAX, stdin);
int len;
while ( *str != '\0' ) {
str++;
len++;
}
char arr[len];
for ( int i=0; i<len; i++ ) {
arr[i] = i;
}
printf("%d\n", arr[5]);
return 0;
}
输出localhost:e26 Yuki$ gcc home2.c
localhost:e26 Yuki$ ./a.out
请输入一个句子: I love
Segmentation fault: 11
但是这样写又是好的,为啥呢?#include <stdio.h>
int main(){
int n;
printf("请输入一个数字: ");
scanf("%d", &n);
char arr[n];
for ( int i=0; i<n; i++ ) {
arr[i] = i;
}
printf("%d\n", arr[5]);
return 0;
}
输出localhost:e26 Yuki$ gcc home2.c
localhost:e26 Yuki$ ./a.out
请输入一个数字: 10
5
不让你用malloc造内存~ 你就再造个数组呗~ #include <stdio.h>
#define MAX 1024
int main(){
char p_arr[MAX] = {0};
char *str = p_arr;
printf("请输入一个句子: ");
fgets(str, MAX, stdin);
int len = 0;
while ( *str++ != '\0' ) {
len++;
}
char arr[len];
for ( int i=0; i<len; i++ ) {
arr[i] = i;
}
printf("%d\n", arr[len-1]);
return 0;
}
|