LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 826|回复: 6

打印3个字符可以,三个以上就错误?

[复制链接]
发表于 2004-12-13 09:20:45 | 显示全部楼层 |阅读模式
:help
[PHP]#include <stdio.h>

int main() {
        char *mp3 = "mp3";
        int i,j;
        char *ff;
        for (i = 0; i < (strlen(mp3) +1 ); i++)
        {
                        strcpy(ff,mp3 + i);
                for (j = 0; j < i; j++)
                        strncat(ff,mp3 + j,1);
                printf("%s\n",ff);
        }
}[/PHP]

结果如下:
[PHP][root@WLX a]# ./a.out
mp3
p3m
3mp
mp3[/PHP]


改为四个字符时:
[PHP]#include <stdio.h>

int main() {
        char *mp3 = "amp3";
        int i,j;
        char *ff;
        for (i = 0; i < (strlen(mp3) +1 ); i++)
        {
                        strcpy(ff,mp3 + i);
                for (j = 0; j < i; j++)
                        strncat(ff,mp3 + j,1);
                printf("%s\n",ff);
        }
}[/PHP]

s输出时:
[PHP][root@WLX a]# ./a.out
amp3
mp3a
p3am
3amp
amp3
段错误[/PHP]

让我有点晕,怎么多个字符就出现段错误呢??
发表于 2004-12-13 09:28:33 | 显示全部楼层
没有为ff分配内存,不出错才怪
 楼主| 发表于 2004-12-13 09:35:13 | 显示全部楼层
那为什么三个数好用,4个就不好用了呢?能说一下原理吗?谢谢.
另我怎么为ff分配内存呢?
char *ff='"";
行吗?
发表于 2004-12-13 10:40:04 | 显示全部楼层
居然不初始化你的指针?
建议看一下c trap,里面有详细介绍!
 楼主| 发表于 2004-12-13 10:53:28 | 显示全部楼层
谢谢
发表于 2004-12-14 08:46:43 | 显示全部楼层

分配内存

动态分配用 malloc ,要想静态分配可以定义一个数组如 str[长度], 然后让 ff 指向它,即 ff = str。分配完后就可以使用了,要注意不要溢出,就是存放的数据不要超过分配的内存长度
发表于 2004-12-14 16:05:45 | 显示全部楼层
使用未初始化指针,出什么问题都不要感到奇怪,呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表