购物网站排名女装,黄页在哪里买?,在电脑上做二建题 哪个网站好,做网站二维码目录
前言
赋值方法
char s[]#xff1a;
char*
char**
问题
修改字符串常量 前言
char**#xff0c;char*#xff0c;char s[]赋值的方式是不同的#xff0c;当你搞混的时候#xff0c;系统会报出段错误#xff08;Segmentation Fault#xff09;#xff0c;所…目录
前言
赋值方法
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 i0;i7;i){d[i]48i;a[2][i]48i;}
错误赋值方法 char a[3][8]{okkmoo,iju44};a[2]8987;//错误char d[8]op;dhelloc;//错误
上述代码中的a[ 2 ]d 是不可改变的如果想要赋值可以单个单个元素赋值。
char*
char* 是字符串常量或者是指针可以直接赋值为字符串或者让指针指向某个字符或字符数组har s[]。如 char b[8]{iikkkk};char*pc;//后面自动跟一个空字符char*qb;
注意字符串常量不可以改变但可以让char* 重新指向另一个字符串常量 char*pc899555;p[0]5;//错误pplm;//正确
char**
首先需要创建一个char**类型的指针变量。然后为指针变量分配内存使其能够存储char*类型的指针。最后将char*类型的指针数组的元素逐个赋值给char**类型的指针。
下面是一个示例代码演示了如何将char*类型的指针数组赋值给char**类型的指针
#include stdio.hvoid 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 stdio.h
#includestring.hvoid fun(char*s);int main()
{char*sokkmoo;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[ ][ ]。