C语言中关于pointer与strcpy

来源:百度知道 编辑:UC知道 时间:2024/06/05 10:29:36
#include <stdio.h>
#include <string.h>

main ()
{
char *str ="abcd";
char *str1;
strcpy (str1,str);
}
以上CODE在xp/vista, codeblock中无法运行,有什么内存不能被读的问题。dev/c++似乎没有问题,VC中似乎也不行。问题似乎在于不能对pointer使用strcpy,为什么会这样呢?如果不用strcpy,是否有其他替代的function?需要一个在GCC compiler中可以运行的方法,谢谢。
char *tokenizer (char store[])
{
int x=1;
char *result[5000] ;
char *str;
result [x-1] =(char *)malloc((strlen(str)+1)*sizeof(char));
str = strtok(store, " ");
strcpy (result[x-1],str);
x++;
while (1)
{

str = strtok(NULL, " ");
result [x-1] =(char *)malloc((strlen(str)+1)*sizeof(char));
strcpy (result[x-1],str);
x++;
}
return *result;

}

原来的CODE是写成这样的,基本上把一个ARRAY进行TOKENIZE并且存成一个POINTER ARRAY,叫做result,但是现在依然有问题,请帮助。
如能解答再加50分吧


str = strtok(store, " ");

result

对于开始的问题 :
char *str1;
你定义了一个指向字符的指针,但没有初始化,那就是说这个指针当前的指向内存中某个不确定的位置,这个地方可能是代码区,也可能是栈区中其他变量存储的地方,也有可能你运气比较好在一个安全的地方.(str1被称做野指针)
strcpy (str1,str);
而这个是干什么呢,它将字符串str的内容存入到str1开始的地址中,这是一个不确定的地址,这么做是非常危险的,可能会让系统崩溃!!!

对于问题补充部分:
1.你的返回值有问题
你需要的是指针数组的首地址 所以要指向指针的指针

2.你的循环没有结束条件
char ** tokenizer (char store[])
{
int x=1;
char *result[5000] ;
char *str = store;
str = strtok(store, " ");
result [x-1] =(char *)malloc((strlen(str)+1)*sizeof(char));
strcpy (result[x-1],str);
x++;
while (str != NULL && x < 5000)
{

str = strtok(NULL, " ");
result [x-1] =(char *)malloc((strlen(str)+1)*sizeof(char));
strcpy (result[x-1],str);
x++;
}
return result;

}

看来楼主不知道 指针和内存 是个什么关系啊!!

#include <stdio.h>
#include <string.h>

main ()
{
char *str ="abcd&qu