-3

我已经重写了我以前的程序,我想将 *dirty 更改为 **dirty。你能给我一些建议吗?这是我的代码:

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;
        ...
4

2 回答 2

0

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

void clean(char** dirtyPointer)
{
    int i = 0, j = 0;
    char* dirty = *dirtyPointer;
    ...
于 2013-09-19T19:25:36.400 回答
0

取决于你想做什么,首先,在你的主要内容中注意这一点

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

所以你将你的 10 指针数组重新分配到一个大小为 1 的指针数组中。看起来不正确(如果你提供更多,如 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;
}
于 2013-09-19T20:34:59.503 回答