nzo*_*dlo 1 c arrays string fgets char
我正在使用的数组是:
char arr[91][12];
Run Code Online (Sandbox Code Playgroud)
所以我使用for循环从文件填充我的数组,如下所示:
for(i = 0; fgets(arr[i], 12, inFile); i++){}
Run Code Online (Sandbox Code Playgroud)
当我想从该数组中打印任何内容时,它会自动转义到下一行.
测试该数组:
for(i = 0; fgets(arr[i], 12, inFile); i++){
printf("%s", arr[i]);
}
//one
//two
//three etc.
//want it to be 'one two three etc.'
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用strpbrk()来查找\n数组中的每个字符串并将其更改为\0:
for(i = 0; fgets(arr[i], 12, inFile); i++){
if(strpbrk(arr[i], "\n") != NULL ){
arr[i][strpbrk(arr[i], "\n")] = '\0';
}
printf("%s", arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
但这给了我错误.有没有更好的方法来做我想做的事情?
它实际上比你想象的要简单得多.如果换行符在最后(就像读取时一样fgets),只需将最后一个字符更改为字符串终止符:
arr[i][strlen(arr[i]) - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)
这-1是因为数组(像字符串可以被认为是)在零开始索引并转到length - 1.
为了确保你真的有一个新行,你可以strpbrk像你一样使用(但当然不像你在其他答案中解释的那样).但我认为使用它会更好strrchr.首先是因为它更简单(只搜索字符而非字符串),第二,因为它从头开始搜索:
char *newlineptr = strrchr(arr[i], '\n');
if (newlineptr != NULL)
*newlineptr = '\0';
Run Code Online (Sandbox Code Playgroud)
或者最快捷的方式:
size_t length = strlen(arr[i]);
if (arr[i][length - 1] == '\n')
arr[i][length - 1] = '\0';
Run Code Online (Sandbox Code Playgroud)