在编写一个简单的函数来从字符串中删除特定字符时,我遇到了这个奇怪的问题:
void str_remove_chars( char *str, char to_remove)
{
if(str && to_remove)
{
char *ptr = str;
char *cur = str;
while(*ptr != '\0')
{
if(*ptr != to_remove)
{
if(ptr != cur)
{
cur[0] = ptr[0];
}
cur++;
}
ptr++;
}
cur[0] = '\0';
}
}
int main()
{
setbuf(stdout, NULL);
{
char test[] = "string test"; // stack allocation?
printf("Test: %s\n", test);
str_remove_chars(test, ' '); // works
printf("After: %s\n",test);
}
{
char *test = "string test"; // non-writable?
printf("Test: %s\n", …Run Code Online (Sandbox Code Playgroud) 我期待以下两个向量在RAM中具有相同的表示:
char a_var[] = "XXX\x00";
char *p_var = "XXX";
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,f(char argument[])如果我调用它,对类型库函数的调用会破坏正在运行的应用程序f(p_var).但使用还f(a_var)可以!
为什么?
我是C编程的新手,我在理解C编程中常见的陷阱和不同库函数的常见用法时遇到了问题.有人能指出一个很好的资源,在那里我可以学习C编程中的细微之处.还有一点可以指向一个很好的资源学习像gdb这样的调试工具.
另外我想知道char *c="hello";和之间有什么区别char c[10]="hello".有人可以告诉我在不同情况下哪一个推荐给另一个.
感谢和问候,
像老鼠.