目录
前言
赋值方法
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 <stdio.h>
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 <stdio.h>
#include<string.h>
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
声明为一个字符数组而不是字符串常量。文章来源:https://www.toymoban.com/news/detail-648353.html
int main()
{
char s[] = "okkmoo"; // 将s声明为字符数组
fun(s);
printf("%s", s);
return 0;
}
char *s[ ]="123456",与上述一样,不可以改变。可以改声明为char s[ ][ ]。文章来源地址https://www.toymoban.com/news/detail-648353.html
到了这里,关于C语言char**,char*,char s[]赋值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!