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 <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声明为一个字符数组而不是字符串常量

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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包