=============================================== ================================
void trim(const char * orig, char * dest)
{
size_t front = 0;
size_t end = sizeof(orig) - 1;
size_t counter = 0;
char * tmp = null;
if (sizeof(orig) > 0)
{
memset(dest, '\0', sizeof(dest));
/* Find the first non-space character */
while (isspace(orig[front]))
{
front++;
}
/* Find the last non-space character */
while (isspace(orig[end]))
{
end--;
}
tmp = strndup(orig + front, end - front + 1);
strncpy(dest, tmp, sizeof(dest) - 1);
free(tmp); //strndup automatically malloc space
}
}
=============================================== ================================
我有一个字符串:
'ABCDEF / G01'
上面的函数应该删除空格并返回给我:
'ABCDEF / G01'即可。
相反,我得到的是:
'ABCDEF /'
有什么想法吗?
注意:引号只是为了向您显示原始字符串中存在空格。
答案 0 :(得分:4)
strncpy
错了。 sizeof(dest)
不是你想要的(它是你机器上指针的大小)。您可能想要:end - front
。相反,尝试:
memcpy(dest, front + start, end - front);
dest[end] = 0;
答案 1 :(得分:2)
sizeof(dest)
没有按照你的想法做到!它返回指针的大小,而不是字符串的长度。您需要为函数提供目标的最大长度。
对于要使用orig
函数的字符串strlen
。
答案 2 :(得分:1)
size_t end = sizeof(orig) - 1;
strncpy(dest, tmp, sizeof(dest) - 1);
你可能想要strlen而不是sizeof。
答案 3 :(得分:1)
void trim(const char * orig, char * dest)
{
size_t front = 0;
size_t end = sizeof(orig) - 1;
在该代码中,sizeof(orig)
是指针的大小。所有指针的大小都相同,在您的实现中可能只有8个。您想要使用的是strlen(orig)
。
答案 4 :(得分:0)
尝试此代码(它不使用临时内存):
void trim(const char * orig, char * dest)
{
size_t front = 0;
size_t end = strlen(orig)-1;
size_t counter = 0;
*dest = '\0';
if (strlen(orig) > 0)
{
/* Find the first non-space character */
while (front < end && isspace(orig[front]) )
{
front++;
}
/* Find the last non-space character */
while (front < end && isspace(orig[end]))
{
end--;
}
counter = front;
while ( counter <= end )
{
dest[counter-front] = orig[counter];
counter++;
}
}
}
注意:未经测试!
答案 5 :(得分:0)
您必须在函数的任何位置将sizeof()替换为strlen()。 这是工作编辑:
void trim(const char * orig, char * dest)
{
size_t front = 0;
size_t end = strlen(orig)-1;
size_t counter = 0;
char * tmp = NULL;
if (strlen(orig) > 0)
{
memset(dest, '\0', strlen(dest));
/* Find the first non-space character */
while (isspace(orig[front]))
{
front++;
}
/* Find the last non-space character */
while (isspace(orig[end]))
{
end--;
}
tmp = strndup(orig + front, end - front + 1);
strncpy(dest, tmp, strlen(dest));
free(tmp); //strndup automatically malloc space
}
}
(我已经测试过了)