c语言 - 字符 * 如果我不打印它就会消失?



我在这里有一个非常奇怪的问题。我基本上具有一个函数,该功能会带有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:%sn", 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] = '';
    printf("%dn", getStringLength(SecuCode));
    return SecuCode;
}

该行运行时提取SecuCode OK:

printf(%dn, getStringLength(SecuCode));

结果是:(我正在从文件中读取带有不同数据的文件)

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

是正确的

但是当我发表评论时:

//printf(%dn, getStringLength(SecuCode));

输出为:

TEST:
TEST:
TEST:

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

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

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

最新更新