我这里有一个很奇怪的问题。我基本上有一个接受 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/