如何将指针更改为指向指针?

时间:2013-09-19 19:20:59

标签: c

我已经改写了我以前的程序,我想把脏脏改成**脏。你能给我一些建议吗? 我的代码是:

void clean(char *dirty)
{
    int i = 0, j = 0;
    char *temp;

    temp = strdup(dirty);

    if(NULL == temp)
    {
        printf("strdup(), failed");
        return;
    }

    while(i < strlen(temp))
    {
        if(isalpha(temp[i]) || isspace(temp[i]) || temp[i] == '?'
            || temp[i] == '.' || temp[i] == '!' || temp[i] == ',')
        {
            dirty[j] = temp[i];
            j++;
        }
        i++;
    }
    dirty[j] = '\0';
    free(temp);
}

改变了main()的一部分,我遇到了一些问题,我和朋友一起创建了这个:

int main(int argc, char** argv) 
{
    FILE* fp;
    char** tab;
    int i = 0;
    int lines = 0;
    int length = 10;

    if(argc != 2)
    {
        printf("Incorrent syntax! Use ./name_of_program input_file\n");
        return 1;
    }

    if(!(fp = fopen(argv[1],"r")))
    {
        printf("Could not open the file! Please try again!\n");
        return 2;
    }

    tab = (char**)malloc(length*(sizeof(char*)));
    if(!tab)
    {
        printf("Could not allocate memory!\n");
        free(tab);
        return 3;
    }

    while(!feof(fp))
    {
        tab[i] = getNumber(fp);

        if(i >= length) 
            {

                length += 10;
                tab = (char**)realloc(tab, sizeof(char*));
                if(tab == NULL)
                {
                    free(tab);
                    return 5;
                }
            }

        if(tab[i] == NULL)
        {
            printf("Incorrect character in the infile! Terminating\n");
            free(tab);
            return 4;
        ...

2 个答案:

答案 0 :(得分:0)

不完全确定你的意思。像这样的东西?

void clean(char** dirtyPointer)
{
    int i = 0, j = 0;
    char* dirty = *dirtyPointer;
    ...

答案 1 :(得分:0)

根据你想做什么,冷杉,请在主要内容中注明

tab = (char**)realloc(tab, sizeof(char*));

因此,您将10指针数组重新分配到大小为1的指针数组中。似乎不正确(realloc将给定指针分配的内存更改为提供的大小,如果提供更多,如length * sizeof。 ..你会增加数组大小,你不要只是丢失所有数据。

现在,如果要将“clean”函数应用于字符串数组(char *),则应包括数组的当前最大大小。我会更快地建议你。

void clean_All(char ** strings, int size) 
{
     int i;

     if (strings == NULL)
         return;

     for(i = 0; i < size; i++) {
         if (strings[i] == NULL)
             return; 
         clean(strings[i]);
     }

     return;
}