将值分配给malloc创建的2d数组

时间:2014-07-28 10:46:27

标签: c

我遗漏了一些关于使用malloc设置2d数组并更具体地使用指针的基本知识。现在我只想用“a”填充每个阵列点。当我将“a”放入数组循环(第二个)时,我得到了这个编译器错误“赋值从指针生成整数而没有强制转换”。超级困惑,搜索互联网,但我迷失了资源,找不到合适的。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main(int argc, char **argv){
    char **myArray;
    int i=0, k=0;
    myArray = malloc(15);

    for(i=0;i<10;i++) {
        myArray[i] = malloc(10);
    }

    for(i=0;i<10;i++){
         for(k=0; k<10; k++){
              myArray[i][k] = "a";
         }
    }

    for(i=0;i<10;i++){
          for(k=0; k<10; k++){
                 printf("%c\n", myArray[i][k]);
          }
    }   

}

5 个答案:

答案 0 :(得分:0)

myArray[i][k] = "a";正在复制指向本地字符串的指针,而不是char。

使用 myArray[i][k] = 'a';

如果要使用printf("%c\n", myArray[i][k]);

进行打印

答案 1 :(得分:0)

myArray[i][k] = "a";

应该写成

myArray[i][k] = 'a';

&#34;&#34;是一个字符串文字

&#39;一个&#39;是一个字符常量

myArray[i] = malloc(10)

为10个字符分配内存。

&#34;赋值的警告从没有强制转换的指针生成整数&#34;建议它需要一个整数,当你使用&#34; a&#34;时给它一个指针值。使用&#39; a(带单引号)将转换为整数ASCII值,并且能够以char数据类型存储。

答案 2 :(得分:0)

您的分配方案非常棒:

char **myArray;
myArray = malloc(15); //You allocate 15 bytes in here

尝试做这样的事情:

myArray = malloc(15 * sizeof(char*));  /* allocate space for 15 char *-s */
/* Depending on your system this could be 60 or 120 bytes */

现在编译错误是完全不同的事情:

 myArray[i][k] = "a";

它说的是左侧需要char值(整数类型),但是你给它一个字符串文字(char *);您可以通过以下方式修复它:

myArray[i][k] = 'a';

如果您想要做的是将该角色设为'a'。

答案 3 :(得分:0)

#define SZ 10

int main(int argc, char** argv)
{
    char** myArray;
    int i, j;

    myArray = malloc( SZ * sizeof(char*) );

    for(i=0;i<SZ;++i)
        myArray[i] = malloc(SZ);

    for(i=0;i<SZ;++i)
        for(j=0;j<SZ;++j)
            myArray[i][j] = 'a';

    for(i=0;i<SZ;++i)
        for(j=0;j<SZ;++j)
            printf("%c\n", myArray[i][j]);

    for(i=0;i<SZ;++i)
        free(myArray[i]);
    free(myArray);
}

答案 4 :(得分:0)

该程序包含许多错误。例如,下面的陈述是什么意思?

myArray = malloc(15);

幻数15是什么意思?

有效代码可以采用以下方式

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main( int argc, char **argv )
{
    const int N = 10;
    char **myArray;
    int i;

    myArray = ( char ** )malloc( N * sizeof( char * ) );

    for ( i = 0; i < N; i++ ) myArray[i] = ( char * )malloc( N * sizeof( char ) );

    for ( i = 0; i < N; i++ ) strcpy( myArray[i], "a" );

    for ( i = 0; i < N; i++ ) printf("%s\n", myArray[i] );

    for ( i = 0; i < N; i++ ) free( myArray[i] );

    free( myArray );
}

或者

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char **argv )
{
    const int N = 10;
    char **myArray;
    int i, k;

    myArray = ( char ** )malloc( N * sizeof( char * ) );

    for ( i = 0; i < N; i++ ) myArray[i] = ( char * )malloc( N * sizeof( char ) );

    for ( i = 0; i < N; i++ )
    {
        for ( k = 0; k < N; k++ ) myArray[i][k] = 'a';
    }  

    for ( i = 0; i < N; i++ )
    {
        for ( k = 0; k < N; k++ ) printf( "%c", myArray[i][k] );
        puts( "" );
    }  

    for ( i = 0; i < N; i++ ) free( myArray[i] );

    free( myArray );
}