|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
复制代码
|
|