指针移动的问题

cowman4 2003-10-14 08:38:11
我是想做一个函数,去掉字符串的后4位,我写的程序如下
int strJQ(char *str)
{
char *tempStr = (char *)malloc(sizeof(char *));//初始化
tempStr = str;
tempStr = tempStr + (strlen(str) - 3);
tempStr = 0;
tempStr = tempStr - (strlen(str) - 3);
return 0;
}
调用时
char *strT = (char *)malloc(sizeof(char *));//初始化
strT = "aaabbb.aa";
n = strJQ(strT);
但是在执行tempStr = 0;的时候,内存地址就变了,后面一句也就没用了,请问我应该如何做
...全文
35 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiayule 2003-10-15
  • 打赏
  • 举报
回复
str[strlen(str)-n]='\0';没错,我也喜欢
Wolf0403 2003-10-14
  • 打赏
  • 举报
回复
天光早兄也喜欢这样的一句代码?呵呵。

楼主:

str[strlen(str)-n] = '\0';
从 str 最后截去 n 个字符,最简单的了^_^
skybat 2003-10-14
  • 打赏
  • 举报
回复
up///
TianGuangZao 2003-10-14
  • 打赏
  • 举报
回复
char *tempStr = (char *)malloc(sizeof(char *));//初始化
tempStr = str;

以上纯属多此一举。
int strJQ(char *str) 中 str 就已经是函数 strJQ 的自动变量,它是 main 函数里指针 strT 的一份拷贝。
return tempStr; 想必没经过大脑。

还有 daizh() 的程序:
char *strT = (char *)malloc(sizeof(char *));
strcpy(strT,"aaabbb.aa");

空间大小分配不正确。sizeof(char *) 只有 4 个字节,相当于:
char *strT = (char *)malloc(4);
而 "aaabbb.aa" 足足有 10 个字节长,怎么够呢?
existsluawjb 2003-10-14
  • 打赏
  • 举报
回复
int strJQ(char *str)
{
int i;
char *tempStr = (char *)malloc(sizeof(char *));//初始化
tempStr = str;
i=strlen(tempStr);
//tempStr = tempStr + (strlen(str) - 3);
tempStr [i-3]='\0';
return tempStr;
}
TianGuangZao 2003-10-14
  • 打赏
  • 举报
回复
str[strlen(str)-n] = '\0'; 这句好,我喜欢。
TianGuangZao 2003-10-14
  • 打赏
  • 举报
回复
我的程序:

#include <stdio.h>
#include <string.h>

int strTruncate(char *str)
{
if ( str == NULL || strlen(str) < 3)
return -1;
str += strlen(str) - 3;
*str = '\0';

return 0;
}

int main( void )
{
char *strT = (char *)malloc(10);
strcpy( strT, "aaabbb.aa");
printf( "Before truncated: %s\n", strT);

strTruncate( strT);
printf( "After truncated: %s\n", strT);

return 0;
}

这样不是更简洁么!
Wolf0403 2003-10-14
  • 打赏
  • 举报
回复
或者直接
str[strlen(str)-n] = '\0'; 就可以了,嘿嘿
Wolf0403 2003-10-14
  • 打赏
  • 举报
回复
char * TruncStr(char * str, unsigned n)
{
int pos = strlen(str) - n;
str[pos] = '\0';
return str;
}
从 str 截去最后 n 位, 并返回结果字符串
挺拔的劲松 2003-10-14
  • 打赏
  • 举报
回复
tempStr = 0;
这句错误,它使tempStr指向了地址为0的存储单元,而不是字符串结束符。
daizh 2003-10-14
  • 打赏
  • 举报
回复
至于为什么传指针int strJQ(char **str),为什么用strcpy(strT,"aaabbb.aa");赋值,其中道理及好处,你应该你看出来。
daizh 2003-10-14
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int strJQ(char **str)
{
char *tempStr = (char *)malloc(sizeof(char *));
tempStr = *str;
tempStr = tempStr + (strlen(*str) - 3);
*tempStr = '\0';
tempStr = tempStr - (strlen(*str) - 3);
return 0;
}

void main( void )
{
char *strT = (char *)malloc(sizeof(char *));
strcpy(strT,"aaabbb.aa");
int n = strJQ(&strT);

printf("%s\n",strT);

}
fireinsky 2003-10-14
  • 打赏
  • 举报
回复
应该将
tempStr = 0;(将指针置空null)
改为
*tempStr = '\0';(将指针所指内容变为'\0')

playboyxp 2003-10-14
  • 打赏
  • 举报
回复
int strJQ(char *str)
{
tempStr = str;
tempStr = tempStr + (strlen(str) - 4);
*tempStr = '\0';
return 0;
}
cowman4 2003-10-14
  • 打赏
  • 举报
回复
刚才说的不对是后3位,也就是想到的aaabbb

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧