我在这里有一个非常奇怪的问题。我基本上具有一个函数,该功能会带有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()
的本地数组,您返回此本地数组的地址,这将导致不确定的行为。