我要做的是:读取x字符串s_1…S_x(定义最大值)长度l=1000000并存储它们。变量x是作为输入给出的,表示应该是全局定义的。
我想做的是:
-
全局定义指向char指针的指针:
char** S;
-
在本地,从输入中读取x后,为x个指向char的指针分配空间:
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("1n");
if(S[i][j]==' '){ printf("2n");
length[i] = j;
break;
}else{
S_b[i][j] = S[i][j]-96; printf("3n");
}
}
}
}
打印'1'然后崩溃。我知道代码远非最佳,但现在我只想先解决问题。谢谢!
有很多事情在发生:
改变了奇怪的铸造malloc的东西,工作,但很讨厌。
此外,你不应该使用sprint来复制内存…我不会总是分配最大值。
你可以分配正确的金额,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);
}
#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("%sn", S[0]);//fine
printf("%cn", S[0][0]);//fine
return 0;
}