C语言之字符数组在if{}里面赋值给char *引发的问题

1 问题

我的buff在if{}里面,然后对buff进行内存操作,最后赋值给char *类型的url,发现url最后没有得到数据

如下代码

#include <stdio.h>
#define TRUE 1

void set_value(char *p)
{
    *p = 'c';
    *(p + 1) = 'h';
    *(p + 2) = 'e';
    *(p + 3) = 'n';
}

int main()
{
    char *url = NULL;
    if (TRUE)
    {
char buff[10] = {0};
        set_value(buff);
url = buff;
    printf("first url is %s\n", url);
    }
    //具体操作url
    printf("second url is %s\n", url);
    return 0;
}

我把buff定义在if{}里面,然后在实现一个函数操作buff,然后在里面赋值给url,
然后在{}外面再操作url发现url是NULL的,但是我单独这样写个Demo这个url又不为NULL

2 解决办法

后面再做了优化,把char buff[10] = {0}放在if外面

int main()
{
    char *url = NULL;
    char buff[10] = {0};
    if (TRUE)
    {
        set_value(buff);
url = buff;
    printf("first url is %s\n", url);
    }
    //具体操作url
    printf("second url is %s\n", url);
    return 0;
}

3 总结

一般字符数组赋值给char *,我们最好把字符数组和char *保持同区域

(0)

相关推荐

  • C语言 字符串常用函数 示例

    字符串常用函数一 #include <stdio.h>#include <string.h>int main(){char *str="字符串常用函数";p ...

  • C语言编程时,各种类型的变量该如何初始化?

    在敲代码的时候,我们会给变量一个初始值,以防止因为编译器的原因造成变量初始值的不确定性.对于数值类型的变量往往初始化为0,但对于其他类型的变量,如字符型.指针型等变量等该如何初始化呢? 数值类变量初始 ...

  • C#把字符数组转换成含有分隔符的字符串(5-3-4-2-5-5)

    /// <summary>         /// 把数组转换成含有分隔符的字符串         /// </summary>         /// <param n ...

  • 字符数组清空

    大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第46讲:利用字典和数组,进行数据的模糊分类汇总.在VBA中,字典是引用的对象,那么我们可否能建立一个对象的数组呢?可以的.我们今日就来利用这个 ...

  • 获取字符串、字符数组的长度

    在C/C 中常用的获取字符串长度或者字符串数组长度的函数有 sizeof() length() strlen() size() 其中strlen(str)和str.length()和str.size( ...

  • C语言二维数组作为函数参数?(陷阱)

    大家有构建过二维数组作为函数的参数吗?有没有遇到什么问题呢?现在,我们先来看一个函数: void func1(int **array, int m, int n) {  int i = 0, j = ...

  • 【易错】C语言二维数组作为函数参数?

    大家有构建过二维数组作为函数的参数吗?有没有遇到什么问题呢?现在,我们先来看一个函数: void func1(int **array, int m, int n) {  int i = 0, j = ...

  • 字符串之字符数组种是否所有的字符都只出现过一次

    字符串之字符数组种是否所有的字符都只出现过一次 例子:       chas=['a','b','c'],return true,chas=['1','2','1'],return false   解 ...

  • 用递归实现字符数组的反转

    用递归实现字符数组的反转 比如 char a[10] = {''a', 'b', 'c'}; 用递归实现后打印为 'c', 'b', 'a' 代码实现: #include<stdio.h> ...

  • C语言二维数组的定义、初始化、赋值

    上节讲解的数组可以看作是一行连续的数据,只有一个下标,称为一维数组.在实际问题中有很多数据是二维的或多维的,因此C语言允许构造多维数组.多维数组元素有多个下标,以确定它在数组中的位置.本节只介绍二维数 ...

  • [Go] GO语言实战-使用append函数要重新赋值

    使用append函数的时候 , 要把扩展后的新slice重新赋值给原变量名 , 因为当底层数组的空间不足的时候 , 会扩充内存空间 ,内存空间会重新分配 通常我们并不知道append调用是否导致了内存 ...