我要做的是:读取定义最大值的x字符串s_1 ... s_x。长度l = 1000000并存储它们。变量x作为输入给出,表示应该是全局定义的。
我想怎么做:
全局定义指向char:
的指针char** S;
在本地,从输入读取x后,为x指针分配空间:
S = (char**) malloc(sizeof(char*)*x);
在本地为每个字符串s_i分配空间并将字符串读入已分配的空间:
while(i<x){
S[i] = (char*) malloc(sizeof(char)*1000000);
scanf("%s",S[i]);
i++;
}
当我尝试访问
时 S[0][0]
它给出了内存访问错误。有任何想法吗?谢谢!
编辑:
我打印了数组并且工作正常,所以问题确实存在于访问代码中。这是:任何人都可以看到问题是什么?因为我不能......
makeBinary(){
printf("inside makeBinary()\n");
S_b = malloc(sizeof(int)*1000000*x);
length = malloc(sizeof(int)*x);
int i;
int j;
for(i=0;i<x;i++){
for(j=0;j<1000000;j++){ printf("1\n");
if(S[i][j]=='\0'){ printf("2\n");
length[i] = j;
break;
}else{
S_b[i][j] = S[i][j]-96; printf("3\n");
}
}
}
}
打印'1'然后崩溃。我知道代码远非最优,但是现在我想首先解决问题。谢谢!
答案 0 :(得分:0)
有很多事情发生:
改变了奇怪的铸造malloc的东西,但有点icky
你也不应该使用sprintf复制内存......
我不会总是分配最大值
你可以分配正确的金额,strlen()+1
...确保0填补结尾......如:
int t = 100;
char * buffer = malloc(sizeof(char*)*t);
S = &buffer;
for( int i = 0; i<10 ; i++){
char * somestring = __FILE__;
size_t len = strlen(somestring);
S[i] = (char*) malloc(len+1);
S[i][len] = 0;
memcpy(S[i], somestring,len);
}
答案 1 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
char** S;
int main(void){
int i = 0, x = 100;
S = (char**) malloc(sizeof(char*) * x);//t --> x
while(i<x){
S[i] = (char*) malloc(sizeof(char)*1000000);
if(S[i]==NULL){// check return of malloc
perror("memory insufficient");
return -1;
}
scanf("%s",S[i]);
i++;
}
printf("%s\n", S[0]);//fine
printf("%c\n", S[0][0]);//fine
return 0;
}