学习『带你学C带你飞』第26集,字符串统计的长度,为啥不能作为数组的变量长度?
伟大的鱼油们,学习『带你学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;
for ( int i=0; i<len; i++ ) {
arr = i;
}
printf("%d\n", arr);
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;
for ( int i=0; i<n; i++ ) {
arr = i;
}
printf("%d\n", arr);
return 0;
}
输出
localhost:e26 Yuki$ gcc home2.c
localhost:e26 Yuki$ ./a.out
请输入一个数字: 10
5
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
int main() {
//char *str;
char *str = malloc(MAX);
printf("请输入一个句子: ");
fgets(str, MAX, stdin);
int len;
while(*str != '\0') {
str++;
len++;
}
char arr;
for(int i = 0; i<len; i++) {
arr = i;
}
printf("%d\n", arr);
return 0;
} 你的len没有初始化对它进行++得到的值是不确定的 #include <stdio.h>
#define MAX 1024
int main()
{
char *str; //错误1:指针没有赋初值,是野指针。
printf("请输入一个句子: ");
fgets(str, MAX, stdin);
int len;//错误2:应改为 int len = 0;
while ( *str != '\0' ) {
str++;
len++;
}
char arr; //仅仅是统计字符串长度的话,这个语句块是多余的。
for ( int i=0;i<len; i++ ) {
arr = i;
}
printf("%d\n", arr);
//错误3:字符串的长度不确定,如果少于6个字符,就会出现数组越界,arr应改为arr
return 0;
} 人造人 发表于 2018-1-25 00:12
小甲鱼的作业中说,没学malloc,不让用。
参考『http://bbs.fishc.com/thread-70265-1-1.html』的第 5 个知识点 『变长数组 VLA』。
我这边试了用 scanf 接受一个固定的值,可以有动态数组的功能,但是统计的值,就会给我报『Segmentation』 Vision 发表于 2018-1-25 09:00
#include
#define MAX 1024
谢谢您耐心的解答,按照您给我的错误改正,但是没能解决我的问题,
将『错误1』修正成 char *str = NULL;
将『错误2』修正成 int len = 0;
『错误3』确实是多余的,这个是我的测试代码,一定会传5个值进去的。
参考『http://bbs.fishc.com/thread-70265-1-1.html』的第 5 个知识点 『变长数组 VLA』。
用『scanf』接受固定的 『int』值,可以用。『本帖问题-示例2』
自己统计出来的值不能用,奇怪在这里。『本帖问题-示例1』
不让你用malloc造内存~ 你就再造个数组呗~
#include <stdio.h>
#define MAX 1024
int main(){
char p_arr = {0};
char *str = p_arr;
printf("请输入一个句子: ");
fgets(str, MAX, stdin);
int len = 0;
while ( *str++ != '\0' ) {
len++;
}
char arr;
for ( int i=0; i<len; i++ ) {
arr = i;
}
printf("%d\n", arr);
return 0;
}
页:
[1]