int main(void){ char ch[100]={};int i=0,count=0;scanf("%s",ch);while(ch[i]!='\0'){ count ++;i ++;} printf("%d\n",count);return 0;}
for (i=0;i<3;i++)printf("%s\n",p+i*20); //指针寻址 ;//第二个字符串开始的地址,应该是a[0][0]后移20个字符的地方。p是指向字符的指针 }
因为gets不检查是否数组超界,字符串是以/0作为结尾标志。如果你字符串所在的内存块恰巧全部都是/0,那你不管输入多少长度,只要不超出这个内存块大小的字符串,总有一个/0作为结尾,就能够正常的puts。所以gets是一个不安全的函数,它会导致栈溢出,我可以输入我设计好长度的数据覆盖掉内存里你要调用的某个函数,改变它...
rt,大一新生,用的vs2022,想测试一下scanf输入字符数组,故意输入了超出数组规定长度的字符串,结果却正常输出了,想问问这是怎么回事 人类695 异能力者 6 string头文件已经正常引用,在第一行 人类695 异能力者 6 又试了二维数组超出范围结果还是没报错 心眼观物 彩虹面包 13 ,C语言的哲学是相信程序员不会干...
int main(){ int numtmp;int i;char ch;char endstr[4] = "end";int len,len_max,num_max;char str[MAX_STRING][MAX_ALPH] = {0};printf("Please input the string.NOTE:end with input \"end\" \n");for(i = 0; i < MAX_STRING; i++){ gets(str[i]);if (!strcmp(...
int main(void){ char str[20] = {'\0'};int i = 0;int num_low = 0;fgets(str, 20, stdin);while ('\0' != str[i]){ if (('a' <= str[i]) && ('z' >= str[i])){ num_low++;} i++;} printf("%d\n", num_low);return 0;} ...
数组长度不是不能修改的吗,为什么我在末尾再加两个字符(\0已经覆盖了),还是可以正常输出,没有\0它是怎么知道字符串结束了 天蝎dwb 强能力者 7 应该是这张图 天蝎dwb 强能力者 7 我是从这个题目发现这个问题的,程序里s就5个有效字符,最后运行puts(s)为什么能输出7个有效字符 無所谓的青春 低能力者 5 ...
我在ubuntu上几乎每次运行都是这个情况——在字符末尾输出字符0x02(就是那个方框),而在windows上有时候没有,有时候有大神教教我~~ GTA小鸡 团子家族 10 请复习C语言基础:长度为8的字符数组最多可以容纳长度为几的字符串 君不修 麻婆豆腐 11 字符串末尾得是'\0' 度神 便当 3 实际长度等于字符...
我想这个应该跟编辑器有关系,如果你是纯C语言编辑器的,你不能声明一个元素数等于数组长度而不含'\0'的字符串数组,所以puts并没有什么问题。我用我的编辑器试了一下,我的不是纯C语言编辑器,可以声明那种字符串数组,结果确实没有输出。