0

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

我想怎么做是:

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

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

    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("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”然后崩溃。我知道代码远非最佳,但现在我只想先解决问题。谢谢!

4

2 回答 2

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;
}
于 2013-05-02T22:32:22.093 回答
0

发生了很多事情:
改变了奇怪的铸造 malloc 的东西,它有效但很恶心。
此外,您不应该使用 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);
}
于 2013-05-02T20:55:29.703 回答