|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 奥普瓯江 于 2020-1-13 14:52 编辑
这个程序里面为什么str2[0]这个里面的数据在随后输出的时候变化了呢?
- #include <stdio.h>
- int main()
- {
- char str1[] = "ababaaababa";
- char str2[sizeof(str1)];
- int next[sizeof(str1)];
- int i = 1, j = 0;
- str2[0] = sizeof(str1);
- while(i <= str2[0])
- {
- str2[i] = str1[i - 1];
- i++;
- }
- i = 1;
- j = 0;
- next[1] = 0;
- printf("***%d\n", str2[0]); //这个字符串中输出的是12
- while (i < str2[0])
- {
- if (j == 0 || str2[i] == str2[j])
- {
- i++;
- j++;
- next[i] = j;
- printf("%d\n", next[i]);
- }
- else
- {
- j = next[j];
- }
- }
- printf("***%d\n", str2[0]); //为什么这里输出的是6呢,在这个程序中我并没有给str2下标0,处从新赋值
- return 0;
- }
复制代码
我在这个图片中用米号标注了
- #include <stdio.h>
- int main()
- {
- char str1[] = "ababaaababa";
- char str2[sizeof(str1)];
- int next[sizeof(str1)];
- int i = 1, j = 0;
- str2[0] = sizeof(str1); // str2[0] = 12
- while(i <= str2[0]) // i <= 12 ???
- {
- str2[i] = str1[i - 1]; // str2[12]存在吗?
- i++;
- }
- i = 1;
- j = 0;
- next[1] = 0;
- printf("***%d\n", str2[0]); //这个字符串中输出的是12
- while(i < str2[0])
- {
- if(j == 0 || str2[i] == str2[j])
- {
- i++;
- j++;
- next[i] = j;
- printf("%d\n", next[i]);
- }
- else
- {
- j = next[j];
- }
- }
- printf("***%d\n", str2[0]); //为什么这里输出的是6呢,在这个程序中我并没有给str2下标0,处从新赋值
- return 0;
- }
复制代码
|
|