我遗漏了一些关于使用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]);
}
}
}
答案 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 );
}