Hui*_*ang 1 c string truncate char segmentation-fault
我想在C中编写一个函数,将输入字符串截断为32个字符,但下面的代码给出了一个分段错误.谁能解释为什么会如此?
void foo (char *value){
if (strlen(value)>32) {
printf("%c\n", value[31]); // This works
value[31] = '\0'; // This seg faults
}
}
Run Code Online (Sandbox Code Playgroud)
如果你这样称呼你的函数:
char str[] = "1234567890123456789012345678901234567890";
foo(str);
Run Code Online (Sandbox Code Playgroud)
它会工作正常.但如果你这样称呼它:
char *str = "1234567890123456789012345678901234567890";
foo(str);
Run Code Online (Sandbox Code Playgroud)
这可能会导致段错误.
这里的区别在于,在前一种情况下str是一个char数组,而在后一种情况下str是一个指向字符串常量的指针.字符串常量通常位于内存的只读部分,因此尝试修改它会导致核心转储.
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |