c语言 使用指针来赋值的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 10:32:03
。。。刚才提的问题怎么不见了,再问遍。

这个程序是用来去掉字符串右边的空格和制表符的
思路是从右边扫描,遇到空格和制表符就向前移一位,直到扫描到字符为止,在把这个字符的后一位置\0,然后返回。
问题是我使用*(in_str+length)='\0';来赋值的时候,编译无错,执行到这句的时候出错,不知道是什么原因。
代码:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

char* strs_TrimRight(char*);

void main()
{
char *str="asfda ";
strs_TrimRight(str);
}

char* strs_TrimRight(char* in_str)
{
if(in_str==NULL)
{
printf("in_str is NULL");
exit(-1);
}
int length=strlen(in_str);
while(*(in_str+length-1)==' '||*(in_str+length-1)=='\t')
{
length--;
}
*(in_str+length)='\0';
//in_str[length]='\0';
return in_str;
}
问题是无论是*(in_str+length)还是*(in_str+length-1),还是其他的,好像使用*(in_str+数值)的赋值方法在这个程序里不行啊,运行就报错误Unhandled exception in trimright.exe:0xC

char *str="asfda "; //这里str所指的是常量,你要赋值给它当然会出现非法访问的错误,改成char str[]="asfda "; 就不会出错了

*(in_str+length)='\0';
编译的时候是不做数组越界检查的

你就是*(in_str+length+100)赋值编译也不出错

最后一个元素是*(in_str+length-1)