c-查找2D字符数组中的行数



如何在C中查找动态2D字符数组中的行数?

那里什么都没有。

尝试使用以下代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int k = 97;
void foo(char **a)
{
    int i = 0;
    for(i=0; a[i] != NULL; ++i)
      printf("i = %dn", i);
}
void strcpyo(char* a, char*b){
    int i=0;
    for(i=0;b[i]!='';i++){
        a[i]=b[i];
    }
    a[i]='';
}
void strcpym(char* a, char*b){
    int i=0;
    for(i=0;b[i]!='';i++);
    memcpy(a,b,i+1);
}
void freee(char** ptr){
int i;
        for(i = 0;i < k; ++i)
        {
            free(ptr[i] );
        }
    free(ptr);
}
void alloc(char ***p)
{
    *p = (char **)malloc(k * sizeof(char *));
    int i,j;
    for(j=0;j<k;j++)
    {
       // for(i = 0;i < j; ++i)
        {
            (*p)[j] = (char *)malloc(11 * sizeof(char));
            strcpy((*p)[j],"paicharan");
        }
        //printf("j = %d ", j);
        //foo(p);
    }
}
int main()
{
    char **p;
    alloc(&p);
#if 0
    char **p = (char **)malloc(k * sizeof(char *));
    int i,j;
    for(j=0;j<k;j++)
    {
        for(i = 0;i < j; ++i)
        {
            p[i] = (char *)malloc(11 * sizeof(char));
            strcpy(p[i],"paicharan");
        }
        printf("j = %d ", j);
        foo(p);
    }
#endif
    foo(p);
    freee(p);
    return 0;
}

#if 0 #endif中的代码运行得很好,但如果我在函数alloc(char**)中创建数组,则会对数组中奇数行给出错误的答案。有人能解释为什么吗?

即。对于CCD_ 4给出错误答案,而对于even number给出正确答案。

您的代码依赖于未定义的行为才能正确工作,即它只能偶然工作。这与元素的偶数或奇数计数无关。

void alloc(char ***p)函数中,您为k指针分配内存,该指针指向字符:char**。然后用新的有效char*指针填充所有k指针,即它们都不是NULL。稍后在void foo(char **a)中执行for(i=0; a[i] != NULL; ++i);由于a[k - 1]是非null的,它将正确地对它们进行迭代。但在那之后a[k]可能是空的,也可能不是空的,您永远不知道里面有什么。访问您分配的数组之外的内容也是未定义的行为(由于越界访问)。

生成k + 1元素并将第k元素设置为NULL使其起作用;确保释放了所有k + 1元素,并且没有泄漏最后一个重要元素。

既然你告诉我宏中的代码运行良好,我就忽略了这一点;不知道那里是否也有UB。如果你做这个练习是为了学习,那没关系。如果你打算做一些其他的项目,试着重用一些已经提供了这些功能的现有C库。

相关内容

  • 没有找到相关文章

最新更新