如果我不打印,char * 会消失吗?

标签 c string return

我这里有一个很奇怪的问题。我基本上有一个接受 char* 的函数,它拆分字符串并返回子字符串。我的问题是,如果我打印 char* 的长度,然后返回它,那么该值将保留,但如果我不调用函数来获取长度,那么当它从函数中出来时,它就会消失。

我可能在上面解释得不好,所以我将复制并粘贴下面的代码段:

void processFile (char *currentLine, int currentLineNumber)
{
    int     type;

    char    *accountName, *secCodeRef, *secCode = NULL, *reference = NULL;

    if ((type = getType(currentLine)) == TYPE_HEADER)
    {
        accountName = strtok (currentLine, " "); //Remove "Type"

        accountName = strtok (NULL, " ");   //Get Account Name
        secCodeRef = strtok (NULL, " ");    //get Security code and reference
        secCode = getSecCode(secCodeRef, secCode); //Get Security Code
        printf("TEST:%s\n", secCode);

    }

secCodeRef 基本上是一个包含 安全代码和引用(例如)GB0007980592REFERENCE1 的字符串。前 11 个字符是安全代码,其余是引用。所以我将这个字符串传递给一个名为 getSecCode 的函数:(顺便说一句,SECCODELENGTH 是 13)

char *getSecCode (char *secCodeRef, char *secCode)
{
    char        SecCode[SECCODELENGTH];
    char        *SecuCode = (char*)&SecCode;

    memcpy(SecCode, &secCodeRef[START], SECCODELENGTH-1);

    SecCode[SECCODELENGTH-1] = '\0';

    printf("%d\n", getStringLength(SecuCode));

    return SecuCode;

}

当这条线运行时,它提取 SecuCode ok:

printf(%d\n, getStringLength(SecuCode));

结果是:(顺便说一句,我正在从一个文件中读取不同的数据)

12
TEST:GB0007980592
12
TEST:GB0007980593
12
TEST:GB0007980594

哪个是正确的

但是当我注释掉时:

//printf(%d\n, getStringLength(SecuCode));

输出是:

TEST:
TEST:
TEST:

为什么打印语句会影响返回值?

最佳答案

 char        SecCode[SECCODELENGTH];
 char        *SecuCode = (char*)&SecCode;

SecCode 是函数 getSecCode() 的本地数组,您返回此本地数组的地址,这将导致未定义的行为。

关于如果我不打印,char * 会消失吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30218210/

相关文章:

c - fgets 读取 .csv 文件中超出行尾的内容

c++ - 将函数指针返回到在 main() 中初始化的对象

c - 如何使用函数中生成的两个随机数作为矩阵坐标?

c++ - 为什么我的模板函数在此调用中不是有效匹配项?

c - 是否可以在文本文件中定义指向字符的指针?

c - C 语言的文件处理计算

c - 矩阵乘法:为什么非阻塞优于阻塞?

java - 有人可以解释在 String 类中被覆盖的 toString 方法的源代码吗?

string - 解析器和词法分析器的设计准则?

string - 将字符串的首字母转换为大写的快速函数?