改行文字の直前までを表示すればよいではありませんか?
C
1#include <stdio.h> // printf
2#include <string.h> // strlen
3
4struct { char add[80]; } table[2] = { "osaka\n", "tokyo\n" };
5
6int main(void)
7{
8 for (int i = 0; i < 2; i++)
9 printf("[%.*s]\n", (int)strlen(table[i].add)-1, table[i].add);
10}
表示ではなくて取り出したいのなら、sscanf を使えばよいでしょう。
C
1#include <stdio.h> // sscanf, puts
2
3struct { char add[80]; } table[2] = { "osaka\n", "tokyo\n" };
4
5int main(void)
6{
7 for (int i = 0; i < 2; i++) {
8 char s[80];
9 sscanf(table[i].add, "%79[^\n]", s);
10 puts(s);
11 }
12}