【发布时间】:2018-09-28 22:46:07
【问题描述】:
我正在尝试用 C 语言编写一个方法,该方法将提取起始字符串和结束字符串之间的子字符串。基于布尔标志,它可能包含/排除起始子字符串。 即,
char source[100] = "Some random text with $$KEY:value$$";
char dest[12];
extractSubstring (source, dest, "KEY:", "$", false);
这应该填充 dest = "value"。
我的程序如下:
#include <stdio.h>
typedef int bool;
#define true 1
#define false 0
int main()
{
char source[100] = "Some random text with $$KEY:value$$";
char dest[12];
extractSubstring (source, dest, "KEY:", "$", false);
return 0;
}
void extractSubstring (char *source, char *dest, char *startingText,
char *endingText, bool includeStart)
{
int sourceLen = strlen(source);
int startLen = strlen(startingText);
int endingIndex = sourceLen;
source = strstr (source, startingText);
if(includeStart){
strcpy (dest, source);
}
else{
source+=startLen;
strcpy (dest, source);
}
if(strlen(endingText)>0){
int endingIndex = strstr (dest, endingText) - dest;
}
dest[endingIndex] = '\0';
printf(dest);
}
这会将 dest 填充为“value$$”而不是“value”。如何丢弃最后一个字符。
【问题讨论】:
-
int endingIndex = strstr (dest, endingText) - dest;隐藏变量。dest[endingIndex] = '\0';之后可以写入越界。 -
多么愚蠢的错误。谢谢