全局定义多维字符数组



我要做的是:读取x字符串s_1…S_x(定义最大值)长度l=1000000并存储它们。变量x是作为输入给出的,表示应该是全局定义的。

我想做的是:

  1. 全局定义指向char指针的指针:

    char** S;
    
  2. 在本地,从输入中读取x后,为x个指向char的指针分配空间:

    S = (char**) malloc(sizeof(char*)*x);
    
  3. 为每个字符串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;
}

相关内容

  • 没有找到相关文章

最新更新