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

时间:2015-05-13 14:42:51

标签: 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是一个字符串,其中包含两者安全代码和引用(.e.g。)GB0007980592REFERENCE1。前11个字符是安全代码,其余是参考。所以我将这个字符串传递给一个名为getSecCode的函数:( SECCODELENGTH是13 btw)

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

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

结果是:(我从btw中读取不同数据的文件)

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

哪个是正确的

但是当我发表评论时:

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

输出结果为:

TEST:
TEST:
TEST:

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

1 个答案:

答案 0 :(得分:4)

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

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