我这里有一个非常奇怪的问题。我基本上有一个接受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语句会影响返回值?
答案 0 :(得分:4)
char SecCode[SECCODELENGTH];
char *SecuCode = (char*)&SecCode;
SecCode
是一个函数getSecCode()
的本地数组,你返回这个本地数组的地址,这将导致未定义的行为。