int compress(char str[]) {
char tempStr [256];
int i,j, counter=0;
if (!isdigit(str[i]) && (!isspace(str[i]))) {
tempStr[j] = str[i];
j++;
printf("%c", tempStr[i]);
} else {
counter++;
}
str = tempStr;
}
char str[] = "abc abc abc 123";
result = compress(&str);
问题:
str
char
分配给tempStr
?str
中将tempStr
替换为compress
?我认为str = tempStr
错了感谢
答案 0 :(得分:1)
1.您的代码未命中tempStr defination,如 char tempStr [LENGTH] ,请确保 LENGTH 足够大。 2.C字符串应该以'\ 0'结尾,所以你需要在循环后设置tempStr [j] ='\ 0'(我认为这是遗漏的)。然后你可以使用strcpy copy tempStr to str。
答案 1 :(得分:1)
看起来你对字符串,数组和指针有点困惑。
char str[] = "abc abc abc 123";
表示内存中的某个地方有一个包含这些字符的数组。当声明时,'str'是常量,不能设置为指向其他地方。
相反,你需要分配每个单独的角色,这是你开始做的事情
在函数中使用语句tempStr[j] = str[i]:
你需要循环遍历str中的字符并检查每个字符,然后将char分配给tempStr,tempStr应该至少与原始str []数组一样大。
类似
char *tempStr = calloc( strlen( str ) + 1, 1 ); // allocates a buffer +1 char for \0
for (int i = 0, j = 0; i < strlen( str ); ++i)
{
if (!isdigit(str[i]) && (!isspace(str[i])))
{
tempStr[j++] = str[i];
printf("%c", str[i]);
}
}
现在你已经删除了str []中的一些字符,但现在需要移动 将tempStr的内容返回到str,这可以使用strcpy:
完成strcpy( str, tempStr );
然后释放缓冲区
free( tempStr );
鲍勃是你的叔叔。
答案 2 :(得分:0)
您应该使用memcpy
或strcpy
(如果它是以空字符结尾的字符串)。
在示例中,tempStr
未定义,因此我猜测它是char
的数组。虽然,你可能需要一个循环......
答案 3 :(得分:0)
char tempStr [256];
tempStr
是一个可以容纳256个字符的字符数组。
但是这句话会发生什么 - str = tempStr;
?
当你说tempStr
时,得到的是指向数组第一个元素的指针(即&amp; tempStr [0])。因此,使用该语句您实际上并未将tempStr
的元素复制到str
。 rvalue的类型为char*
,但左值的类型为char []
,它们不兼容并导致编译错误。
要实际复制数组的元素,您应该使用strcpy
。