【发布时间】:2018-11-26 18:50:48
【问题描述】:
我正在处理一项作业,并注意到我在尝试打印字符串的单个字符时遇到了 Seg Fault。这很奇怪,因为当我删除打印语句时没有分段错误。
我用更简单的代码简化了给我 Seg Fault 的那部分作业。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printword( char **sptr){
int i;
for( i = 0; i < 6; ++i){
printf( "%c\n", *sptr[i]);
}
}
int main(){
char *sentence = "This is my sentence\n";
printf("Sentence is: %s", sentence);
printword( &sentence );
}
当我运行此代码时,仅打印第一个字母,然后紧跟在“?”之后其次是“分段错误:11”。似乎我可以打印字符串中的任何字符,但是,在段错误之前只有 1 个字符是我的限制。我不明白为什么这是一个问题,因为我只是在打印。
【问题讨论】:
-
您传递
char**是否有原因? -
如果对运算符优先级有疑问,请使用更多
()。 -
记住这一点:在
C中将字符串更改为另一个字符串时,访问时传递的是单指针。只是侧面没有。 -
@Gox 为什么要传递双指针来编辑字符串?
strcpy、strtok、strcat等不要那样做。 -
@melpomene 抱歉措辞错误,我的意思是用另一个不改变单个字符的字符串交换字符串。
标签: c memory segmentation-fault