为什么多dim数组içnc给我一个错误

时间:2014-03-09 23:24:50

标签: c arrays

我的代码存在问题。当我运行它时,我的应用程序返回我并出错。

我的代码

    #include <errno.h>
#include <sys/types.h>
#undef _POSIX_SOURCE
#include <stdio.h>
#include "ini.h"

void readIniFile()
{
    int i = 0;
    int j = 0;
    char lines [255][255];
    char **tokens;
    static const char filename[] = "../../conf/incoming_files_description.ini"; 
    FILE *file = fopen( filename, "r" );
    if ( file != NULL )
    {
        char line[256];
        while (fgets(line, sizeof line, file) != NULL)
        {
            i++;
            if(i>6) //afficher a partir de la ligne 7
            {
                printf("\n");
                tokens = str_split(line, ';');
                for (j = 0; j<5; j++ )
                {
                lines [i-6][j] = "bonjour";
                printf("%s", lines [1][1]);
                printf("test: %s\n", *(tokens + j));
                free(*(tokens + j));
                }
            }
        }

        fclose (file);
    }
    else
    {
        perror(filename);
    }
}

我有这方面的问题                     printf(“%s”,lines [1] [1]); 当他在行中有勇气时,他会返回错误thx

1 个答案:

答案 0 :(得分:1)

lines [i-6][j] = "bonjour";

实际上将指针指向字符串&#34; bonjour&#34;进入缓冲区。您可能希望使用strcpy()函数将字符串实际复制到缓冲区中。在这种特殊情况下,您将使用

strcpy(dest, src);

在这种情况下是

strcpy(lines[i-6], "bonjour"]

这是第一个维度指向包含字符串的第二个维度开头的维度。在这种情况下,我= = 7所以i-6 == 1。

如果你想要bj的bonjour进入行[1] [1],那么你需要指定&amp;(行[1] [1]),它指向缓冲区中该位置的地址。

printf("%s", lines [1][1]);

将字符串复制到缓冲区后,您希望将指针传递给缓冲区中字符串的开头。既然您已经使用了strcpy(),那么您可以打印整个字符串。

printf("%s", lines[1]);

注意,行[1] [1]包含bonjour的o,因为C使用基于0的索引,除非你使strcpy()的dest参数指向行[1]的第二个元素。