C语言char**,char*,char s[]赋值

C语言char**,char*,char s[]赋值

目录

前言

赋值方法

char s[]:

char*

char**

问题

修改字符串常量

前言

char**,char*,char s[]赋值的方式是不同的,当你搞混的时候,系统会报出段错误(Segmentation Fault),所以有必要做一个总结。

赋值方法

char s[]:

char s[ ], char s[ ][ ]可以直接用字符串赋值,或单个单个的赋值,如:

char a[3][8]={"okkmoo","iju44"};

char b[8]={"iikkkk"};

char c[8]="iikkk";

char d[8];

for(int i=0;i<7;i++)

{

d[i]=48+i;

a[2][i]=48+i;

}

错误赋值方法:

char a[3][8]={"okkmoo","iju44"};

a[2]="8987";//错误

char d[8]="op";

d="helloc";//错误

上述代码中的a[ 2 ],d 是不可改变的,如果想要赋值,可以单个单个元素赋值。

char*

char* 是字符串常量,或者是指针,可以直接赋值为字符串,或者让指针指向某个字符或字符数组har s[]。如:

char b[8]={"iikkkk"};

char*p="c";//后面自动跟一个空字符

char*q=b;

注意,字符串常量不可以改变,但可以让char* 重新指向另一个字符串常量:

char*p="c899555";

p[0]='5';//错误

p="plm";//正确

char**

首先,需要创建一个char**类型的指针变量。然后,为指针变量分配内存,使其能够存储char*类型的指针。最后,将char*类型的指针数组的元素逐个赋值给char**类型的指针。

下面是一个示例代码,演示了如何将char*类型的指针数组赋值给char**类型的指针:

#include

void printArray(char** arr, int size)

{

for (int i = 0; i < size; i++)

{

printf("%s\n", arr[i]);

}

}

int main()

{

char* strings[] = {"Hello", "World", "Example"};

int size = sizeof(strings) / sizeof(strings[0]);

char** s = (char**)malloc(size * sizeof(char*));

if (s == NULL)

{

printf("Memory allocation failed\n");

return 1;

}

for (int i = 0; i < size; i++)

{

s[i] = strings[i];

}

printArray(s, size);

free(s);

return 0;

}

下面这行代码是错误的,尝试将字符串字面量赋值给char**类型的指针t。然而,字符串字面量是不能直接赋值给指针的。

char** t = {"53..7....","6..195..."}

可以改为:

char** t = (char**)malloc(2 * sizeof(char*));

t[0] = strdup("53..7....");

t[1] = strdup("6..195...");

问题

修改字符串常量

#include

#include

void fun(char*s);

int main()

{

char*s="okkmoo";

fun(s);

printf("%s",s);

return 0;

}

void fun(char*s)

{

s[0]='1'; //错误

}

在代码中,出现错误的地方是尝试修改一个字符串常量,这是不允许的。字符串常量是不可修改的。

在main函数中,你定义了一个指向字符串常量的指针s,然后将它作为参数传递给fun函数。在fun函数内部,你尝试将s的第一个字符修改为'1',这违反了字符串常量的不可修改性。

为了修复这个问题,你可以将s声明为一个字符数组而不是字符串常量。

int main()

{

char s[] = "okkmoo"; // 将s声明为字符数组

fun(s);

printf("%s", s);

return 0;

}

char *s[ ]="123456",与上述一样,不可以改变。可以改声明为char s[ ][ ]。

相关推荐

李星辰名字的含义
365bet比分网

李星辰名字的含义

📅 06-28 👁️ 5251
深入解析mixbox工具箱 v2ray的使用与配置
365bet的官网是多少

深入解析mixbox工具箱 v2ray的使用与配置

📅 07-01 👁️ 3108
学生党如何轻松赚钱?8种适合学生的赚钱方法,学业和收入都不耽误!
信息学竞赛中AC、WA、RE、CE、TLE、MLE、PE、OLE、分别什么意思
炉石举报途径有哪些?教你如何有效举报违规行为!
365bet娱乐场平台

炉石举报途径有哪些?教你如何有效举报违规行为!

📅 06-29 👁️ 2184
喵喵战车
365bet比分网

喵喵战车

📅 06-30 👁️ 5219