user-0 提问: 求助

回复:
user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:#include <stdio.h> #include <string.h> #define maxn (10000000+10) int main() {     static char s[maxn];     fgets(s,maxn,stdin);     int tot = 0;     char *p=(char *)s;     while (1) {         if (*p == '1')  tot++;         if (*p==0) break;         p++;     }     printf("%d\n",tot); 	return	0; } 加括号与不加有啥区别

user: user-0
content: 引用 8 楼 paschen 的回复:引用 5 楼 qq_38080117 的回复:[quote=引用 1 楼 paschen 的回复:]数组char s[maxn];太大了，应该在堆上申请空间其次，s[i] == 1 是否想表达的是：s[i] == '1'目的是统计1的个数，所以我也不知道是1还是‘1’。应该是哪个？  应该是后者，表示的是字符的1[/quote]谢谢

user: user-1
content: 这个程序中没区别。加十是我照抄的。

user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:static int s[maxn*sizeof(int)];//将来如果有这么一句，加不加括号区别就大了！在这个程序里有啥区别吗？为啥要加10呢？

user: user-1
content: static int s[maxn*sizeof(int)];//将来如果有这么一句，加不加括号区别就大了！

user: user-0
content: 引用 9 楼 cfjtaishan 的回复:[quote=引用 6 楼 qq_38080117 的回复:] [quote=引用 2 楼 cfjtaishan 的回复:] #include <stdio.h> #include <string.h>  #define maxn   10000000+10  char s[maxn];  int main() {     int tot = 0;     int i;      scanf("%s", s);     for (i = 0; i < strlen(s);i++)         if (s[i] == '1')             tot++;      printf("%d\n",tot);     return  0; } 效率低是由于申请的栈上的空间太大，栈上的空间是有限的，你申请的栈上空间接近10M，代码是在栈上运行的，如果栈上空间不足就会从磁盘上开辟，并做数据交换，自然运行效率就低了。 建议你在数据段或者堆上申请这部分空间。如果不需要那么多空间，可以定义适量，也可以通过malloc和realloc逐步增加空间。 另外,字符'1'和数值1是不一样的它们的数值相差48那0和‘0’也不一样吗？它们也是相差48吗？效率的问题理解了，但是那么大的栈区空间会使程序崩溃吗？[/quote] 对呀，'0'的ascii值是48，数值0就是0,48 - 0 = 48；[/quote]谢谢，懂了

user: user-2
content: 引用 6 楼 qq_38080117 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] #include <stdio.h> #include <string.h>  #define maxn   10000000+10  char s[maxn];  int main() {     int tot = 0;     int i;      scanf("%s", s);     for (i = 0; i < strlen(s);i++)         if (s[i] == '1')             tot++;      printf("%d\n",tot);     return  0; } 效率低是由于申请的栈上的空间太大，栈上的空间是有限的，你申请的栈上空间接近10M，代码是在栈上运行的，如果栈上空间不足就会从磁盘上开辟，并做数据交换，自然运行效率就低了。 建议你在数据段或者堆上申请这部分空间。如果不需要那么多空间，可以定义适量，也可以通过malloc和realloc逐步增加空间。 另外,字符'1'和数值1是不一样的它们的数值相差48那0和‘0’也不一样吗？它们也是相差48吗？效率的问题理解了，但是那么大的栈区空间会使程序崩溃吗？[/quote] 对呀，'0'的ascii值是48，数值0就是0,48 - 0 = 48；

user: user-1
content: #include <stdio.h> #include <string.h> #define maxn (10000000+10) int main() {     static char s[maxn];     fgets(s,maxn,stdin);     int tot = 0;     char *p=(char *)s;     while (1) {         if (*p == '1')  tot++;         if (*p==0) break;         p++;     }     printf("%d\n",tot); 	return	0; }

user: user-3
content: 引用 5 楼 qq_38080117 的回复:引用 1 楼 paschen 的回复:数组char s[maxn];太大了，应该在堆上申请空间其次，s[i] == 1 是否想表达的是：s[i] == '1'目的是统计1的个数，所以我也不知道是1还是‘1’。应该是哪个？  应该是后者，表示的是字符的1

user: user-0
content: 引用 3 楼 user-4 的回复:问题1：在栈内存上申请一个的数组，会导致溢出，如楼上所言在堆上申请内存好一些 2.用scanf输入字符串时，其空格仍被当做字符输了进去 3.如一楼所示 其他，宏定义最后的常数一般加括号处理，for循环中的int i=0在一些编译器不能被支持弱弱的问句，加括号是啥意思，有何区别？不加会出错吗？

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:#include <stdio.h> #include <string.h>  #define maxn   10000000+10  char s[maxn];  int main() {     int tot = 0;     int i;      scanf("%s", s);     for (i = 0; i < strlen(s);i++)         if (s[i] == '1')             tot++;      printf("%d\n",tot);     return  0; } 效率低是由于申请的栈上的空间太大，栈上的空间是有限的，你申请的栈上空间接近10M，代码是在栈上运行的，如果栈上空间不足就会从磁盘上开辟，并做数据交换，自然运行效率就低了。 建议你在数据段或者堆上申请这部分空间。如果不需要那么多空间，可以定义适量，也可以通过malloc和realloc逐步增加空间。 另外,字符'1'和数值1是不一样的它们的数值相差48那0和‘0’也不一样吗？它们也是相差48吗？效率的问题理解了，但是那么大的栈区空间会使程序崩溃吗？

user: user-4
content: 问题1：在栈内存上申请一个的数组，会导致溢出，如楼上所言在堆上申请内存好一些 2.用scanf输入字符串时，其空格仍被当做字符输了进去 3.如一楼所示 其他，宏定义最后的常数一般加括号处理，for循环中的int i=0在一些编译器不能被支持

user: user-0
content: 引用 1 楼 paschen 的回复:数组char s[maxn];太大了，应该在堆上申请空间  其次，s[i] == 1 是否想表达的是：s[i] == '1'目的是统计1的个数，所以我也不知道是1还是‘1’。应该是哪个？

user: user-2
content: #include <stdio.h> #include <string.h>  #define maxn   10000000+10  char s[maxn];  int main() {     int tot = 0;     int i;      scanf("%s", s);     for (i = 0; i < strlen(s);i++)         if (s[i] == '1')             tot++;      printf("%d\n",tot);     return  0; } 效率低是由于申请的栈上的空间太大，栈上的空间是有限的，你申请的栈上空间接近10M，代码是在栈上运行的，如果栈上空间不足就会从磁盘上开辟，并做数据交换，自然运行效率就低了。 建议你在数据段或者堆上申请这部分空间。如果不需要那么多空间，可以定义适量，也可以通过malloc和realloc逐步增加空间。 另外,字符'1'和数值1是不一样的它们的数值相差48

user: user-3
content: 数组char s[maxn];太大了，应该在堆上申请空间  其次，s[i] == 1 是否想表达的是：s[i] == '1'